我在尝试理解如何构建此查询时遇到了问题。
我的数据方案:
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
但是这给了一个糟糕的结果,我怎么能解决这个问题?
答案 0 :(得分:2)
我认为您正在寻找COUNT
与DISTINCT
以及GROUP BY
一起使用的内容:
select category, count(distinct userid)
from interests
where userid in (1,3,9)
group by category
导致:
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