2016-11-30 151 views
-1

我想顯示unqiue性別誰已投票,並允許用戶多次投票,有多個記錄在items_votes相同的user_id。獨特的男女投票誰投票

下面的查詢返回的是男性和女性的數量,但它不是獨一無二的,因爲如果同一個男性用戶多次投票,它會多次計算用戶的性別。

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 BY性別和SELECT DISTINCT?這對我來說似乎更自然。 – 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  

輸出

| maleCount | femaleCount | uniqueMaleCount | uniqueFemaleCount | 
|-----------|-------------|-----------------|-------------------| 
|   5 |   5 |    3 |     2 |