2016-08-10 11 views
-1

sqlを使用して以下の形式で出力を取得するにはどうすればよいですか? 私は大文字と小文字を区別することができますが、同じ行で一意のユーザー数を取得することはできません。最も近い値を取得

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

これまでに何を試しましたか?性別分けのためにCASEで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

関連する問題