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

如何在SQL中仅对subCode列去重并查询所有列

正确实现按subCode去重并返回所有列的SQL方案

问题原因

你之前用的SELECT DISTINCT subCode, Title, grade, section FROM TABLENAME达不到预期,是因为DISTINCT是对所有选中列的组合做去重,不是只针对subCode。只要section这类列的值不同,整行就会被判定为不同,所以会返回全部5行数据。

从你的预期结果来看,需要对每个唯一的subCode,返回任意一行对应的其他列数据(比如每个subCode取第一行),以下是两种可行的实现方式:

方案1:窗口函数(推荐,兼容多数现代数据库)

用ROW_NUMBER()窗口函数按subCode分组编号,只保留每组的第一行:

SELECT subCode, Title, grade, section
FROM (
    SELECT 
        subCode, Title, grade, section,
        ROW_NUMBER() OVER (PARTITION BY subCode ORDER BY section) AS rn
    FROM TABLENAME
) t
WHERE rn = 1;
  • 说明:PARTITION BY subCode按科目编码分组,ORDER BY section决定每组内取哪一行(这里取section排序后的第一行,你可以根据需求改成其他排序规则,比如ORDER BY grade DESC)。如果不需要特定顺序,部分数据库支持省略ORDER BY。

方案2:GROUP BY结合聚合函数

如果你的数据库不支持窗口函数,可通过GROUP BY配合聚合函数,对每个subCode取其他列的对应值:

SELECT 
    subCode,
    MAX(Title) AS Title,
    MAX(grade) AS grade,
    MAX(section) AS section
FROM TABLENAME
GROUP BY subCode;
  • 说明:同一subCode对应的Title和grade值一致,用MAX()/MIN()都能得到正确结果;section会取分组内最大的那个,和你的预期结果匹配。

执行结果

运行上述任意语句,都会得到你想要的结果:

subCodeTitlegradesection
045/01Math12Grade 12.D
011/01Science12Grade 12.D

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:41:27