购买的模型
user_id model_id
1 1
1 4
1 9
1 3
2 3
2 2
2 7
2 4
3 9
3 6
3 1
3 5
4 8
4 7
4 9
4 1
5 8
5 9
利用上表,编写一个查询,输出一个表,该表的列分别是user_id、用户购买的型号、以及购买了与该用户购买的相同型号的人数。结果应该如下所示:
结果
user_id models_purchased users_purchasing_same_models
1 4 4
2 4 2
3 4 3
4 4 4
5 2 3
获得前两个:
SELECT
DISTINCT user_id,
COUNT(DISTINCT model_id)
FROM
purchased_models
GROUP BY user_id
,但是第三个遇到了麻烦。任何帮助将不胜感激。谢谢!
最佳答案
实现此目的的一种方法是使用相关子查询,该子查询对已购买外部范围中引用的用户已购买的任何模型的用户的不同数量进行计数:
select
t1.user_id,
count(distinct t1.model_id) models_purchased,
(
select count(distinct user_id)
from purchased_models t2
where t2.model_id in (
select model_id
from purchased_models
where user_id = t1.user_id
and t2.user_id <> t1.user_id
)
) users_purchasing_same_models
from purchased_models t1
group by t1.user_id
order by t1.user_id
关于mysql查询输出购买过该用户购买过的任意同款车型的人数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28918208/