182.查找重复的电子邮箱
题目:
182. 查找重复的电子邮箱
难度简单207
SQL架构
编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。
示例:
1 | +----+---------+ |
根据以上输入,你的查询应返回以下结果:
1 | +---------+ |
说明:所有电子邮箱都是小写字母。
解题思路
这个题一看好像很简单呀,解题思路就是,查询Email并查出Email的出现多次的邮箱。如何查询出现多次呢?肯定要用函数count()了。
但是怎样写sql语句呢?where里面是不能使用聚合函数的哦,那该咋办呢?
这里就需要了解一个having!!!
我们先看一下:
where和having的概述
“Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。
“Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。
where和having的区别
1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。
2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
结论
1.当分组筛选的时候 用having
2.其它情况用where
-—————————————————-
用having就一定要和group by连用,
用group by不一有having (它只是一个筛选条件用的)
只要条件里面的字段, 不是表里面原先有的字段就需要用having。
SQL在查询表的时候先把查询的字段放到了内存里,而where查询的时候是从表里面查的,其余需要用having。
注:
上面的文章复制使用了 oathevil老哥的这篇文章https://blog.csdn.net/oathevil/article/details/5521757
答案解析
1 | # Write your MySQL query statement below |