PostgreSQL中如何统计movie_id与rating均匹配的行数?
解决方案
1. 统计相同电影相同评分的用户对数量
核心思路是先按movie_id和rating分组,统计每个组合下的不同用户数,再计算每个组合中能形成的用户对数量(组合数公式:C(n,2)=n*(n-1)/2,n为该组合的用户数),最后将所有组合的用户对数量求和。
针对你的示例数据,对应的SQL查询如下:
SELECT SUM(cnt * (cnt - 1) / 2) AS same_rating_pair_count FROM ( SELECT movie_id, rating, COUNT(DISTINCT user_id) AS cnt FROM your_table GROUP BY movie_id, rating ) AS grouped_data;
- 内层子查询:按电影ID和评分分组,统计每个分组下的不同用户数量
cnt - 外层查询:对每个分组计算用户对数量并求和,示例中该查询返回
2,符合预期
2. 同时返回唯一电影ID总数
可以在同一条查询中通过子查询获取唯一电影ID的总数,修改后的SQL如下:
SELECT SUM(cnt * (cnt - 1) / 2) AS same_rating_pair_count, (SELECT COUNT(DISTINCT movie_id) FROM your_table) AS unique_movie_total FROM ( SELECT movie_id, rating, COUNT(DISTINCT user_id) AS cnt FROM your_table GROUP BY movie_id, rating ) AS grouped_data;
该查询会同时输出两个结果:
same_rating_pair_count:相同电影相同评分的用户对数量(示例为2)unique_movie_total:唯一电影ID的总数(示例为3)
内容的提问来源于stack exchange,提问作者ATEATEEFFEEE
相关产品推荐
相关产品推荐

