@Leetcode简单题自用整理[TOC]
1. 查找重复数据
题目描述
编写一个SQL查询,查找所有重复的XXXXX ,也可以是重复N次的,只需改变计数条件即可。
【解题思路】
思路1
- 看到“找重复”的关键字眼,
首先要使用分组函数(group by),
再用聚合函数中的计数函数count() 给查找的列计数。 - 分类汇总后,生成一个辅助表,可以从该子表中筛选查找列出计数大于1的元素,即重复的需要查找的内容。
- 使用辅助表结合where进行条件筛选进行嵌套子查询。
思路2
使用group by 直接在后面使用having 进行计算,筛选符合条件的。
前面提到聚合函数(count),where字句无法与聚合函数一起使用。因为where子句的运行顺序排在第二,运行到where时,表还没有被分组。
如果要对分组查询的结果进行筛选,可以使用having子句。
作者:houziAI
链接:https://leetcode-cn.com/problems/duplicate-emails/solution/tu-jie-sqlmian-shi-ti-ru-he-cha-zhao-zhong-fu-shu-/
来源:力扣(LeetCode)
注意事项 :
1、where 后不能跟聚合函数,因为where执行顺序大于聚合函数。where > group by > having > order by
2、where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
3、having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
作者:he-qing-ping
链接:https://leetcode-cn.com/problems/duplicate-emails/solution/cha-zhao-zhong-fu-de-dian-zi-you-xiang-by-he-qing-/
来源:力扣(LeetCode)
2. 查询不在表中的数据
需要考虑join两个表
select …
from 表1 as a
left join 表2 as b
on a.列名=b.列名
where b.列名 is null;
3. 分组比较
- 先连接多表,在使用子表进行查询,注意保持查询的条件顺序与辅助子表一致。
- 每当出现“每”就是要用分组汇总了,所以是子句(group by 分组列)
- 查询最好,最优等,使用max(), 同理,最差,最小用min()
延伸——TOPN 问题
==思路1 ==
== 思路2 ==