gpt4 book ai didi

sql - Case When 条件中的计数函数

转载 作者:行者123 更新时间:2023-12-04 13:43:18 28 4
gpt4 key购买 nike

谁能向我解释以下 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 计数内:
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.idPRIMARY 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com