根据没有重复,学习找到重复的数据(找出重复出现n次的数据)
【题目】
编写一个SQL查询,查找“用户行为表"中所有重复的访客。
【解题思路一】:利用子查询
1.看到“找重复”的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给访客id列计数。
select 访客id, count(访客id) as 计数
from 用户行为表
group by 访客id;
2. 分组汇总后,生成了一个新表,从这个表里选出计数大于1的姓名,就是重复的访客。
select 访客id
from 辅助表
where 计数 > 1;
3. 汇总。
select 访客id
from
(select 访客id, count(访客id) as 计数
from 用户行为表
group by 访客id
) as 辅助表
where 计数 > 1
⚠️ 聚合函数(count),where字句无法与聚合函数一起使用。因为where子句的运行顺序排在第二,运行到where时,表还没有被分组。
【解题思路二】
select
访客id
from
用户行为表
group by
访客id
having count(
访客id
) > 1;
补充:【题目】如何删除重复数据
delete from
用户行为表
where 访客id in (
select
访客id
from
用户行为表
group by
访客id
having count(
访客id
) > 1;
)