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

SQL查询中如何合并SELECT结果里指定列值重复的记录?

这个需求完全可以通过SQL实现,以下是两种常用实现方案:

方案1:窗口函数方案(推荐,适配MySQL 8.0+、PostgreSQL、SQL Server等所有支持标准窗口函数的数据库)

该方案后续扩展取最新记录的需求非常方便,只需要调整窗口排序规则即可。

SELECT post_id, author_name, title, content
FROM (
  SELECT
    posts.id as post_id,
    users.name as author_name,
    posts.title,
    posts.content,
    -- 按用户、标题、内容分组,组内按id排序,后续要取最新把id改为时间戳字段倒序即可
    ROW_NUMBER() OVER (PARTITION BY posts.user_id, posts.title, posts.content ORDER BY posts.id ASC) AS rn
  FROM posts
  INNER JOIN users ON posts.user_id = users.id
) t
WHERE rn = 1;

逻辑说明:PARTITION BY 会将用户ID、标题、内容三者完全一致的记录归为同一组,每组内按规则排序后取第一条,就实现了重复记录去重的需求。

方案2:分组聚合方案(兼容低版本数据库,如MySQL 5.x)

如果使用的数据库不支持窗口函数,可以通过分组聚合的方式实现,重复组内默认取最小/最大的帖子ID:

SELECT
  MIN(posts.id) as post_id, -- 要取最大ID改为MAX即可
  users.name as author_name,
  posts.title,
  posts.content
FROM posts
INNER JOIN users ON posts.user_id = users.id
GROUP BY posts.user_id, posts.title, posts.content, users.name;

两种方案执行后都能得到你期望的结果集。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:45:03