簡體   English   中英

如何編寫在組中未找到任何記錄時返回count = 0的SQL查詢

[英]How to write an SQL query that returns count = 0 when no records found in group

我有一個客戶表,我需要按照以下順序從中選擇數據:

Gender      Count
-----------------
Female      10
Male        50
Unknown     2

(上表數據僅作為示例)

為此,我使用了以下SQL:

SELECT decode(gender, 'F', 'Female', 'M', 'Male', 'Unknown') "Gender"
, count(ID) "Count"
FROM client c
WHERE c.created <= '01-JAN-2000'
GROUP BY decode(gender, 'F', 'Female', 'M', 'Male', 'Unknown')
ORDER BY decode(gender, 'F', 'Female', 'M', 'Male', 'Unknown')
;

但是,問題是沒有在2000年1月1日之前創建的客戶端! 因此,該表顯示為空白:

Gender     Count
----------------

但是,我想在這種情況下顯示如下:

Gender     Count
----------------
Female     0
Male       0
Unknown    0

請告訴我該怎么做?

您可以先選擇性別(使用內聯視圖),然后對結果進行left outer join 這將確保始終在第一列中顯示性別列表:

SELECT g.gender
,      count(ID) "Count"
FROM   ( select 'Female' gender from dual
         union all
         select 'Male' gender from dual
         union all
         select 'Unknown' gender from dual
       ) g
left
outer
join   client c
on     decode(c.gender, 'F', 'Female', 'M', 'Male', 'Unknown') = g.gender
and    c.created <= '01-JAN-2000'
GROUP
BY     g.gender
ORDER
BY     g.gender
;

您應該規范化數據以保存性別表。 或者至少在查詢中使用一個(視圖),如下所示,然后進行OUTER連接。

並使用標准日期格式。

編輯:為了更好的可讀性和性能,您必須仔細分類性別。 在此假定未知情況的附加類別“ U”。

SELECT  g.GENDER "Gender"
, count(ID) "Count"
FROM client c, 
     ( SELECT 'Female' As Gender,'F' as GenderId FROM DUAL
       UNION ALL
       SELECT 'Male','M' FROM DUAL
       UNION ALL
       SELECT 'Unknown','U' FROM DUAL
     ) g
WHERE c.created(+) <= DATE '2000-01-01'
    AND c.Gender(+) = g.genderId
GROUP BY g.gender
ORDER BY g.gender
;

這是怎么做的

SELECT 
   'Female' Gender
   , Count(c.ID) Count
FROM 
   Client c
WHERE 
   c.Gender = 'F'

UNION ALL

SELECT 
   'Male' Gender
   , Count(c.ID) Count
FROM 
   Client c
WHERE 
   c.Gender = 'M'

UNION ALL

SELECT 
   'Unknown' Gender
   , Count(c.ID) Count
FROM 
   Client c
WHERE 
   c.Gender is NULL

暫無
暫無

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

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