2016-08-10 127 views
-1

如何使用sql獲取以下格式的輸出? 我可以用大小寫來做到這一點,但我無法在同一行中獲得唯一的用戶數。得到最接近的

id unique_users male_count female_count 
101  3   1   2 
201  1   0   1 
. 
. 
+1

你到目前爲止嘗試過什麼?您是否考慮過CAS與SUM的性別分歧? – hsan

+1

有條件的聚合是將來查找的關鍵概念,但juergend爲您提供了一個很好的答案 – Matt

回答

2

替代計數不同的男性和女性。

SELECT 
    ID, 
    COUNT(DISTINCT "USER") AS unique_users, 
    COUNT(DISTINCT DECODE(gender,'M',"USER")) AS male_count, 
    COUNT(DISTINCT DECODE(gender,'F',"USER")) AS female_count 
FROM your_table 
GROUP BY ID 
ORDER BY ID; 

和相同但沒有Oracle特定的DECODE函數。

SELECT 
    ID, 
    COUNT(DISTINCT "USER") AS unique_users, 
    COUNT(DISTINCT CASE gender WHEN 'M' THEN "USER" ELSE NULL END) AS male_count, 
    COUNT(DISTINCT CASE gender WHEN 'F' THEN "USER" ELSE NULL END) AS female_count 
FROM your_table 
WHERE ID = 101 
GROUP BY ID 
ORDER BY ID; 

我引用了「USER」,因爲它在Oracle中有特定的含義。

3
select id, 
     count(distinct user) as unique_users, 
     sum(case when gender = 'M' then 1 else 0 end) as male_count, 
     sum(case when gender = 'F' then 1 else 0 end) as female_count 
from your_table 
group by id 
+0

如果我使用這種方法,男性和女性的數量將不會是唯一的計數。 – Siddarth