purchased_models
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
,但遇到第三个问题。任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
执行此操作的一种方法是使用相关子查询,该子查询计算已购买外部作用域中引用的用户所购买的任何模型的不同用户数:
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
答案 1 :(得分:0)
我会亲自尝试自我加入表和条件总和,如下所示:
SELECT
a.user_id AS Id,
SUM(CASE WHEN a.user_id = b.user_id AND a.model_id=b.model_id THEN 1 ELSE 0 END) AS ModelCount,
SUM(CASE WHEN a.user_id != b.user_id AND a.model_id=b.model_id THEN 1 ELSE 0 END) AS Others
FROM purchased_models AS a
LEFT OUTER JOIN purchased_models AS b
ON TRUE
GROUP BY a.user_id