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

Oracle SQL统计获胜次数排除低最大值重复记录报错排查

问题原因与解决方案

报错根因

你的NOT IN运算符左侧仅为单个字段a.cnt_wins,但右侧子查询返回了b.cnt_wins和count(b.student_id)两个字段,两边字段数量不匹配,因此触发"too many values"报错。

修正后的SQL代码

WITH st_cte AS
(
    SELECT student_id, student_name, count(wins) cnt_wins
    FROM Table1
    GROUP BY student_id, student_name
)
SELECT *
FROM st_cte a
WHERE a.cnt_wins NOT IN
(
    -- 仅返回需要排除的获胜次数字段
    SELECT b.cnt_wins
    FROM st_cte b
    WHERE b.cnt_wins < (SELECT max(c.cnt_wins) FROM st_cte c)
    GROUP BY b.cnt_wins
    HAVING count(b.student_id) >= 2
)
-- 按要求输出排序
ORDER BY cnt_wins DESC, student_id ASC;

逻辑说明

  • 内层子查询仅返回符合排除规则的cnt_wins值:低于全局最大获胜次数、且对应2名及以上学生的获胜次数
  • 外层查询过滤掉属于这些排除次数的学生记录,完全匹配你的业务规则
  • 去掉了CTE内部的冗余排序,最终排序统一放在查询最外层,执行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:15:03