选择由带有Count的两列分组

时间:2013-03-30 13:44:52

标签: mysql sql

我在尝试理解如何构建此查询时遇到了问题。

我的数据方案:

id category name        userid
1  sports   football    1
2  cars     ferrari     1
3  sports   basketball  1
4  film     Matrix      9
5  film     Fauno       9
6  sports   Surf        3

正如您所看到的,即使对于相同的用户ID,也可以重复类别,因为名称字段不同。所以我的想法是获取一组用户的类别该组中每个类别的用户数量

假设我有一组用户set_of_user =(1,9,3),如果我运行查询

SELECT something FROM category_table WHERE userid IN set_of_user SOME CONDITION HERE

正确的结果应该是:

category: sports
users: 2
category: cars
users: 1
category: film
users: 1

我最好的镜头是:

SELECT userid, category, COUNT(userid) as users from interests WHERE `userid` in ' . $norm_info_ids . ' GROUP BY category

但是这给了一个糟糕的结果,我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找COUNTDISTINCT以及GROUP BY一起使用的内容:

select category, count(distinct userid)
from interests
where userid in (1,3,9)
group by category

SQL Fiddle Demo

导致:

CATEGORY   COUNT(DISTINCT USERID)
cars       1
film       1
sports     2

答案 1 :(得分:1)

首先,您需要选择不同的类别和用户ID配对

select t.category, count(t.user_id)
from
(
 SELECT distinct category,user_id 
 from tab
 where user_id in (1,3,9)
 ) t
 group by t.category