mysql查询之 连续出现的数字,重复出现的邮箱,删除重复的电子邮箱
1.编写一个 SQL 查询,查找所有至少连续出现三次的数字。
+----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+
例如,给定上面的 Logs
表, 1
是唯一连续出现至少三次的数字。
+-----------------+ | ConsecutiveNums | +-----------------+ | 1 | +-----------------+
select Num as ConsecutiveNums from Logs where Id in ( select distinct l1.Id from Logs l1,Logs l2,Logs l3 where (l1.Num = l2.Num and l2.Num = l3.Num and ( (l1.Id + 1= l2.Id and l2.Id +1 = l3.Id)or (l3.Id + 1= l2.Id and l2.Id +1 = l1.Id)or (l3.Id + 1= l1.Id and l1.Id +1 = l2.Id) ) ) order by l1.Id) group by Num
2.编写一个 SQL 查询,查找 Person
表中所有重复的电子邮箱。
示例:
+----+---------+ | Id | Email | +----+---------+ | 1 | a@b.com | | 2 | c@d.com | | 3 | a@b.com | +----+---------+
根据以上输入,你的查询应返回以下结果:
+---------+ | Email | +---------+ | a@b.com | +---------+
select Email from Person group by Email having count(Email)>1
3.编写一个 SQL 查询,来删除 Person
表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
+----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+------------------+ Id 是这个表的主键
delete p1 from Person p1,Person p2 where p1.Email=p2.Email and p1.Id>p2.Id