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

Oracle单列分组查询问题:基于min(id)仍因source存在重复

解决GROUP BY后因source字段导致重复的问题

方法1:聚合处理source字段

如果不需要保留source字段的全部值,可通过聚合函数选择或合并:

  • 取分组内任意一个source值(以MySQL为例):
SELECT MIN(id), col1, col2, ANY_VALUE(source)
FROM your_table
GROUP BY col1, col2;
  • 拼接分组内所有不重复的source值:
SELECT MIN(id), col1, col2, GROUP_CONCAT(DISTINCT source SEPARATOR ', ') AS sources
FROM your_table
GROUP BY col1, col2;

方法2:子查询关联筛选

先获取每个分组的最小id,再关联原表拿到对应行的source:

SELECT t.id, t.col1, t.col2, t.source
FROM your_table t
INNER JOIN (
    SELECT MIN(id) AS min_id, col1, col2
    FROM your_table
    GROUP BY col1, col2
) sub ON t.id = sub.min_id;

此方法直接取最小id对应的完整行,避免source差异导致的重复。

方法3:窗口函数筛选(适用于PostgreSQL、MySQL 8+、SQL Server等)

用ROW_NUMBER()给分组内的行排序,取每组第一行:

SELECT id, col1, col2, source
FROM (
    SELECT 
        id, col1, col2, source,
        ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY id ASC) AS rn
    FROM your_table
) t
WHERE rn = 1;

PARTITION BY后填写分组字段,ORDER BY id ASC确保选中最小id对应的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:28:10