1

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

我的数据方案:

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

但这给出了一个不好的结果,我该如何解决这个问题?

4

2 回答 2

2

我认为这就是您要使用COUNTwith 的内容DISTINCT,以及GROUP BY

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

SQL 小提琴演示

导致:

CATEGORY   COUNT(DISTINCT USERID)
cars       1
film       1
sports     2
于 2013-03-30T13:57:36.420 回答
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
于 2013-03-30T14:05:53.093 回答