31

特定のデータセットに何人の女性と男性が存在するかを示すクエリを作成しようとしています。個人は「tel」という番号で識別されます。同じ「tel」が複数回出現する可能性がありますが、その「tel」の性別は 1 回だけカウントする必要があります。

7136609221 - 男性
7136609222 - 男性
7136609223 - 女性
7136609228 - 男性
7136609222 - 男性
7136609223 - 女性

この example_dataset は次のようになります。
一意の性別の総数: 4
一意の男性の総数: 3
一意の女性の総数: 1

私の試みたクエリ:

SELECT COUNT(DISTINCT tel, gender) as gender_count, 
       COUNT(DISTINCT tel, gender = 'male') as man_count, 
       SUM(if(gender = 'female', 1, 0)) as woman_count 
FROM example_dataset;

そこには実際には2つの試みがあります。COUNT(DISTINCT tel, gender = 'male') as man_countと同じように返されるようですCOUNT(DISTINCT tel, gender)-そこの修飾子は考慮されていません。はSUM(if(gender = 'female', 1, 0))すべての女性レコードをカウントしますが、DISTINCT tels によってフィルタリングされません。

4

2 に答える 2

84

でサブクエリを使用する 1 つのオプションを次に示しますDISTINCT

SELECT COUNT(*) gender_count,
   SUM(IF(gender='male',1,0)) male_count,
   SUM(IF(gender='female',1,0)) female_count
FROM (
   SELECT DISTINCT tel, gender
   FROM example_dataset
) t

これは、サブクエリを使用したくない場合にも機能します。

SELECT COUNT(DISTINCT tel) gender_count,
    COUNT(DISTINCT CASE WHEN gender = 'male' THEN tel END) male_count,  
    COUNT(DISTINCT CASE WHEN gender = 'female' THEN tel END) female_count
FROM example_dataset
于 2013-10-30T01:09:14.950 に答える