2011-08-05 3 views
3

私は、3列がcountry,user_id,genderのテーブルを持っています。 user_idちょうど増分すると、いくつかの国があり、性別は男性または女性のいずれかです。このMySQL - 国別にグループ化された男性と女性の数を計算する

user_id country gender 
1  japan male 
2  peru  female 
3  japan female 
4  fiji  male 
5  peru  female 

と同様に、私は国の独自のリスト、国のためにuser_id年代の総数とそれぞれの国のために男性と女性の番号を返すように1つのクエリを実行します。その結果は次のようになります。

country total male female 
peru 2  NUL 2 
japan 2  1 1 
fiji 1  1 NUL 

私はdiffernetのクエリの数を試してみましたが、1つのクエリ内のすべての結果を返すことができないし、可能な場合は2つのクエリを使用する必要はありません。

これが私の最後の試みである - 私はその混乱を知っているが、私は何もしようとしていた。誰もが1 SELECTで上記を行うことができます

SELECT DISTINCT a.country AS country, COUNT(b.gender) AS male, COUNT(c.gender) AS  female, COUNT(a.user_id) AS total 
    FROM userattributes as a 
    LEFT JOIN userattributes as b ON a.user_id=b.user_id 
    LEFT JOIN userattributes as c ON a.user_id=c.user_id 
    WHERE b.gender='male' AND c.gender='female' 
    GROUP BY country; 

を?

THX

答えて

3

JOIN自体にテーブルへの必要はありません。 SUM集計のCASE式を使用すれば十分です。

+0

+1 @Alex K. –

+0

@Alex K. - それは私の最初の試みでしたが、期待通りに機能しませんでした。 –

関連する問題