2013-10-30 20 views
21

与えられたデータセットにいくつの異なる女性と男性が存在するかを示すクエリを作成しようとしています。その人物は電話番号で識別されます。同じ 'tel'を複数回表示することは可能ですが、 'telの性別は1回だけカウントする必要があります!条件がユニークである場合のMySQLの個別カウント

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によってフィルタリングされません。

+1

あなたがこれを実行すると、あなたは答えとして何を得ていますか? –

+0

'COUNT(DISTINCT tel、gender = '男性')'は、man_count = 4を間違って指定します。それは電話ごとに3つずつ固有でなければなりません。 – Federico

+0

SUM(if(gender = 'female'、1,0))は、woman_count = 2を間違って指定します。それは1でなければなりません。 – Federico

答えて

54

ここ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 
+4

'DISTINCT CASE WHEN gender = '男性' THEN tel END'は完璧に働きました。それは私が探していた解決策でした。ありがとう!! – Federico

+0

COUNT(DISTINCT CASE WHEN)もまさに私が探していたものであり、ありがとう。 – balslev

+0

COUNT(DISTINCT CASE WHEN)が私のために働いた。どうもありがとうございます。 – Madhura

関連する問題