2016-11-30 147 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 |