SQL-每日一题【182.查找重复的电子邮箱】

题目

表: Person

SQL-每日一题【182.查找重复的电子邮箱】_第1张图片

编写一个 SQL 查询来报告所有重复的电子邮件。 请注意,可以保证电子邮件字段不为 NULL。

以 任意顺序 返回结果表。


查询结果格式如下例。

示例 1:

SQL-每日一题【182.查找重复的电子邮箱】_第2张图片解题思路

前置知识

count()

1.count(*) :统计所有的行数,包括为null的行(COUNT(*)不单会进行全表扫描,也会对表的每个字段进行扫描。而COUNT('x')或者COUNT(COLUMN)或者COUNT(0)等则只进行一个字段的全表扫描)。


2.count(1):计算一共有多少符合条件的行,不会忽略null值(其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1..同理,count(2),也可以,得到的值完全一样,count('x'),count('y')都是可以的。count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。)


3.count(列名):查询列名那一列的,字段为null不统计(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

HAVING COUNT() 是 SQL 中用于筛选分组结果的关键字,它通常与 GROUP BY 一起使用。HAVING COUNT() 的作用是对分组后的结果进行过滤,只保留满足条件的分组结果。

有了上述知识我们来解决一下这个问题

1.题目要求我们查询 所有重复的电子邮件 ,首先我们要用 group by 对 email 的值进行分组

2.分好组后 我们用 count( ) 函数计算 分组后结果大于1的 email。

代码实现

select email from Person group by email having count(email)>1 

测试结果

SQL-每日一题【182.查找重复的电子邮箱】_第3张图片

 

你可能感兴趣的:(SQL每日一题,sql,数据库)