谁能向我解释下面的 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 in 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)