作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能向我解释以下 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)
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)
最佳答案
如 user.id
是 PRIMARY KEY
,这些查询在语义上是相同的,尽管它们可能会产生不同的执行计划。
他们会返回 1
对于所有非空姓氏,因为您正在计算其组内 group-by expession 的不同值,根据定义,该值将恰好为 1。
对于空的姓氏,第一个查询将基本上返回 COUNT(u.id)
第二个将返回 COUNT(DISTINCT TO_CHAR(u.id))
,其中,鉴于 u.id
是独一无二的,是一样的。
我相信你需要删除 GROUP BY
从第二个查询:
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
关于sql - Case When 条件中的计数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902780/
我是一名优秀的程序员,十分优秀!