[英]Count function within a Case When condition
任何人都可以向我解釋下面的SQL語句之間的區別嗎? 我可以看到存在差異,但我無法確定可以使它們產生不同結果的確切條件。 順便說一句,我認為distinct
子句對user.id
字段沒有影響,因為所有id都已經是唯一的。 查詢的目的是計算唯一(非空)姓氏的數量。 如果姓氏為空,則計為唯一。
我想這個問題的一般情況是在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)
案例 - 在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)
如果user.id
是PRIMARY KEY
,則這些查詢在語義上是相同的,盡管它們可能產生不同的執行計划。
對於所有非空的姓氏,它們將返回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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.