簡體   English   中英

在條件中計數函數

[英]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.idPRIMARY 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM