2016-11-30 9 views
-1

投票しているユーザーのunq​​iue性別を表示したいと思います。複数の投票が許可されている場合、同じuser_idのitems_votesに複数のレコードがあります。一意の男性と女性の数が投票を投稿しました

以下のクエリでは、男性と女性の数が返されますが、同じ男性ユーザーが複数回投票した場合、ユーザーの性別を何度もカウントするため、unqiueではありません。

SELECT COUNT(CASE WHEN sex = 'M' THEN items_votes.user_id END) AS males, 
     COUNT(CASE WHEN sex = 'F' THEN items_votes.user_id END) AS females 
    FROM items_votes 
    INNER JOIN users_profiles 
    ON items_votes.user_id = users_profiles.user_id 
    WHERE item_id = 5 

上記のクエリの男性と女性のユニークな数が必要です。

ありがとうございます!

+0

なぜセックスでごGROUPないだろうとDISTINCT SELECT?それは私にとってもっと自然なことです。 – duffymo

+1

MySQLまたはSQL Server? –

+0

投稿のタイトルに "Mysql"が表示されませんか? :) – Shahid

答えて

2
SELECT COUNT(DISTINCT(items_votes.user_id)) AS votes, sex 
FROM items_votes 
INNER JOIN users_profiles 
ON items_votes.user_id = users_profiles.user_id 
WHERE item_id = 5 
GROUP BY sex; 
+0

それはunqiueカウントを返しません。 COUNT(items_votes.user_id)と同じuser_idを持つ複数のレコードが存在する可能性があります。クエリを使用するCOUNT(DISTINCT(items_votes.user_id))は機能します。ありがとう – Shahid

+0

ようこそ私は私の答えを編集します:) –

4

SQL DEMO

SELECT COUNT(CASE WHEN `sex` = 'M' THEN `user_id` END) as maleCount, 
     COUNT(CASE WHEN `sex` = 'F' THEN `user_id` END) as femaleCount, 
     COUNT(DISTINCT CASE WHEN `sex` = 'M' THEN `user_id` END) as uniqueMaleCount, 
     COUNT(DISTINCT CASE WHEN `sex` = 'F' THEN `user_id` END) as uniqueFemaleCount 
FROM item  

OUTPUT

| maleCount | femaleCount | uniqueMaleCount | uniqueFemaleCount | 
|-----------|-------------|-----------------|-------------------| 
|   5 |   5 |    3 |     2 | 
関連する問題