订阅更新

查找重复的邮箱:GROUP BY + HAVING

SQL 实战 123 题 · 第 7 题 简单 约 2 分钟读完

LeetCode 182 · 分组计数、HAVING

本文目录
  1. 面试怎么回答
  2. 题意
  3. 表结构
  4. 思路
  5. 参考解法
  6. 易错点

面试怎么回答

按 Email 分组后用 HAVING COUNT(*) > 1 过滤。WHERE 作用在分组前、HAVING 作用在分组后,聚合条件只能写在 HAVING。真实数据里我还会先统一大小写和去空格,否则会漏判重复。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

题意

找出人员表里出现了不止一次的邮箱,每个重复邮箱输出一次。

表结构

  • Person:Id(主键)、Email

思路

按邮箱分组,组内行数大于 1 的就是重复邮箱。对分组结果的过滤要用 HAVING,WHERE 只能过滤分组前的原始行。

参考解法

select Email
from Person
group by Email
having count(*)>1

易错点

  • 把 COUNT(*) > 1 写在 WHERE 里会报错,聚合结果只能在 HAVING 里过滤。
  • 实际业务里邮箱大小写、首尾空格不一致也算重复,要先 LOWER/TRIM 再分组。
刷题进度保存在当前浏览器