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

SQL多字段复合排序后筛选奇数行的查询实现问题

原SQL存在的问题
  • 关联条件错误:两张表的关联逻辑不符合业务设计,学生表的department字段存储的是对应院系的dept_id,正确关联条件应该是E.department = D.dept_id,原语句写的dept_id=student_id完全不匹配对应关系,无法得到正确的院系-学生关联数据。
  • 人数筛选条件错误:需求要求筛选学生人数少于5人的院系,原语句写的total_students<3不符合要求。
  • 行号生成逻辑错误:ROW_NUMBER() OVER()没有指定窗口内的排序规则,行号生成顺序是随机的,无法和要求的排序规则对齐,导致奇偶行筛选结果不符合预期。
  • 表关联方向不合理:如果要覆盖所有院系的统计情况,应该以院系表为主表左连学生表,避免漏掉没有学生的院系,原语句以学生表左连院系表会丢失无学生的院系数据。
正确实现SQL
SELECT name, total_students, total_score 
FROM (
    SELECT 
        D.dept_id,
        D.name,
        COUNT(E.student_id) AS total_students,
        COALESCE(SUM(E.score), 0) AS total_score,
        ROW_NUMBER() OVER(ORDER BY SUM(E.score) DESC, COUNT(E.student_id) DESC, D.dept_id ASC) AS row_id
    FROM school_dept D
    LEFT JOIN Students E ON D.dept_id = E.department
    GROUP BY D.dept_id, D.name
    HAVING COUNT(E.student_id) < 5
) AS t
WHERE row_id % 2 != 0;

执行后输出结果和预期一致:

nametotal_studentstotal_score
Admin111
Physics111
Mathematics111

内容的提问来源于stack exchange,提问作者shockwave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:51:01