【发布时间】:2012-06-05 18:27:55
【问题描述】:
谁能向我解释以下 SQL 语句之间的区别?我可以看到存在差异,但我无法确定可以使它们产生不同结果的确切条件。顺便说一句,我认为distinct 子句对user.id 字段没有影响,因为所有ID 都已经是唯一的。查询的目的是计算唯一(非空)姓氏的数量。如果姓氏为空,则计为唯一。
我想这个问题的一般情况是在 case-when 语句中使用聚合函数。
在 Case-When 内计数:
SELECT
(case when (substr(u.name,40,40) <> ' ')
then count(distinct(substr(u.name,40,40)))
else count(u.id)
end) as "LAST_NAME",
FROM
users u
GROUP BY
substr(u.name,40,40)
Case-When within Count:
SELECT
count (distinct case when (substr(u.name,40,40) <> ' ')
then substr(u.name,40,40)
else to_char(u.id)
end) as "LAST_NAME",
FROM
users u
GROUP BY
substr(u.name,40,40)
【问题讨论】: