You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询需求:按观看数与评分数排序取Top10观众ID

解决你的SQL统计需求

嘿,我来帮你搞定这个查询问题!先说说你之前错误写法里的几个问题:

  • SQL里判断非空不能用!= null,得用IS NOT NULL
  • HAVING是用来过滤分组后的结果的,不是用来统计字段的,统计逻辑应该放在SELECT子句里
  • 你重复写了COUNT(*) AS movies_watched,这完全没必要

接下来给你正确的实现思路和代码:

  • 总观看数:用COUNT(*)就对了,它会统计每个观众的所有记录,不管Ranking是不是NULL,刚好对应“观看数”的需求
  • 评分数:有两种简洁的写法都能统计Ranking不为NULL的行数:
    1. COUNT(Ranking):因为COUNT()函数会自动忽略NULL值,直接统计这个字段就能得到已评分的数量
    2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:25:39