磨刀霍霍:SQL 中的 HAVING 与 WHERE 的区别

SQL 中的 HAVING 与 WHERE 的区别

使用情况

  • 需要使用聚合函数的时候,WHERE 无法与聚合函数一同使用
  • HAVING 通常是在 SQL 语句的最后
  • 含有 HAVING 子句的 SQL 不一定包含 GROUP BY 子句
  • WHEREGROUP BY 之前,在分组之前进行计算
  • HAVINGGROUP BY 之后,在分组之后对小组进行计算

练习题

原题地址:182. 查找重复的电子邮箱

题解 1:

select distinct(p1.Email) from Person p1,Person p2
where p1.Email = p2.Email
AND p1.Id != p2.Id

题解 2:

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

两种方法差异了 39 ms ,但第二种看起来更为直观,且效率更高