SQL去重查询怎么实现_真实案例解析强化复杂查询思维【教学】

admin 百科 23
SQL去重需按业务需求选择方法:纯值去重用DISTINCT,按维度取最新记录用ROW_NUMBER()窗口函数,合并多行数据用GROUP BY配合STRING_AGG等聚合函数。

SQL去重查询怎么实现_真实案例解析强化复杂查询思维【教学】-第1张图片-佛山资讯网

SQL去重不是简单加个 DISTINCT 就完事——它得看你要去重的维度、是否保留其他字段、要不要最新/最全记录,甚至还要考虑性能和业务逻辑。下面用几个真实场景讲清楚怎么选对方法。

基础去重:只取唯一值,不关心哪一条

最常见需求:查出所有不重复的部门名称、城市、产品类别等。

  • 直接用 SELECT DISTINCT 列名,简单高效
  • 注意:DISTINCT 作用于整行结果,如果 SELECT 多列,只要组合值相同就会被去重
  • 错误示范:SELECT DISTINCT dept_name, hire_date FROM emp —— 可能返回同一部门多条记录(因入职时间不同),这不是你想要的“按部门去重”

按某列去重,但要保留完整信息(比如每部门最新一条员工)

这时候 DISTINCT 不够用了,得靠窗口函数或关联子查询。

  • 推荐用 ROW_NUMBER() OVER (PARTITION BY 部门 ORDER BY 入职日期 DESC) 标序号,再外层筛选 rn = 1
  • 示例:SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY updated_at DESC) AS rn FROM employees) t WHERE t.rn = 1
  • 替代方案:用 GROUP BY + 聚合函数(如 MAX(id)),再连表查原记录——适合主键明确、逻辑清晰的场景

去重同时要统计或合并数据(如合并同一用户的多条标签)

不是删记录,而是把重复维度下的多行聚合成一行。

标签: mysql 工具 ai 聚合函数

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~

趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官
趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官