SQL查询需求:按观看数与评分数排序取Top10观众ID
解决你的SQL统计需求
嘿,我来帮你搞定这个查询问题!先说说你之前错误写法里的几个问题:
- SQL里判断非空不能用
!= null,得用IS NOT NULL HAVING是用来过滤分组后的结果的,不是用来统计字段的,统计逻辑应该放在SELECT子句里- 你重复写了
COUNT(*) AS movies_watched,这完全没必要
接下来给你正确的实现思路和代码:
- 总观看数:用
COUNT(*)就对了,它会统计每个观众的所有记录,不管Ranking是不是NULL,刚好对应“观看数”的需求 - 评分数:有两种简洁的写法都能统计
Ranking不为NULL的行数:COUNT(Ranking):因为COUNT()函数会自动忽略NULL值,直接统计这个字段就能得到已评分的数量SUM(CASE WHEN Ranking IS NOT NULL THEN 1 ELSE 0 END):用CASE语句显式判断,逻辑更直观,适合新手理解
最后加上排序和取前10的逻辑,最终的通用SQL查询如下:
SELECT viewer_id, COUNT(*) AS movies_watched, COUNT(Ranking) AS ranking_count FROM viewers_movies_rankings GROUP BY viewer_id ORDER BY movies_watched DESC, ranking_count DESC LIMIT 10;
如果你的数据库是SQL Server或Access,需要把LIMIT 10换成TOP 10,写法调整为:
SELECT TOP 10 viewer_id, COUNT(*) AS movies_watched, COUNT(Ranking) AS ranking_count FROM viewers_movies_rankings GROUP BY viewer_id ORDER BY movies_watched DESC, ranking_count DESC;
这样就能得到你想要的结果:观看数与评分数最高的前10个viewer_id,按观看数降序、评分数降序排序!
内容的提问来源于stack exchange,提问作者genericname
相关产品推荐
相关产品推荐

