簡體   English   中英

SQL count()與group不返回0/0記錄

[英]SQL count() with group by not returning 0/zero records

為便於討論,請考慮Access中的這個基本表(Test)...

ID  division  name   role
1    1        Frank  100
2    2        David  101
3    3        John   101
4    2        Mike   102
5    2        Rob    102
7    3        Dave   102
8    3        Greg   102

我想要計算某個部門中某個角色的用戶。 如果我做一個簡單的count(),我得到正確的0返回:

SELECT COUNT(ID) as ct 
FROM Test 
WHERE role >=101 and division=1;

產量

division   ct
    1       0

但是,我想在結果中包含分區編號(為了進一步加入,報告等),它總是返回null / no行而不是div和count 0:

SELECT division, COUNT(ID) as ct 
FROM Test WHERE role >=101 
GROUP BY division 
HAVING division=1;

要么

SELECT division, COUNT(ID) as ct 
FROM Test 
WHERE role >=101 AND division=1 
GROUP BY division;

產量

division   ct

我最初想到這個是因為如果用戶輸入不在表格中的分區(如4),我也希望這樣做...

SELECT division, COUNT(ID) as ct 
FROM Test 
WHERE role >=101 AND division IN (1,2,4) 
GROUP BY division;

產量

division   ct
    2       3

代替

division   ct
    1       0
    2       3
    4       0

如果計數為0,是否不可能將除數與計數一起返回?

這個怎么樣:

SELECT division, ISNULL(ct,0) AS ct
FROM divisionTable
LEFT JOIN
(SELECT division, COUNT(ID) as ct FROM Test WHERE role >=101 GROUP BY division) CountQuery
ON divisionTable.division = CountQuery.division
WHERE divisionTable.division IN (1,2,4)

執行此操作的最佳方法是創建第二個表,列出所有分區(可以是單個列),然后LEFT(或右鍵)將其加入查詢,因此您確定它將列出所有分區。

這適用於SQL服務器,所以也許......

SELECT  division, COUNT(ID) AS ct
FROM    Test
WHERE   role >= 101
GROUP BY ALL division
HAVING  division = 1 ;

我不確定如何在Access中正確地執行此操作,但這是確保結果集中始終至少有一行的想法:

SELECT *
FROM Test 
WHERE role >=101 AND division IN (1,2,4) 
UNION
SELECT 1 as ID, 1 as division, 'Dummy' as Name, 100 as role
FROM Dual
UNION
SELECT 1 as ID, 2 as division, 'Dummy' as Name, 100 as role
FROM Dual
UNION
SELECT 1 as ID, 4 as division, 'Dummy' as Name, 100 as role
FROM Dual

(基本上,這個語句為每個分區添加了一個Dummy記錄Dual是一個虛擬的Oracle表,只有一個記錄。我確信在聯合中添加記錄有更優雅的方式,但我希望這個想法來對面。)

然后,在此記錄集上按分區運行count(ID)組(可能是臨時查詢),並從計數中減去虛擬記錄(因此select子句將是

SELECT division, count(ID)-1

您是否嘗試過使用count(*)而不是count(ID)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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