SQL(leetcode小白刷题)自用

和自甴很熟 提交于 2020-03-03 01:24:04

@Leetcode简单题自用整理TOC

1. 查找重复数据

题目描述

编写一个SQL查询,查找所有重复的XXXXX ,也可以是重复N次的,只需改变计数条件即可。

【解题思路】

思路1

  1. 看到“找重复”的关键字眼,
    首先要使用分组函数(group by)
    再用聚合函数中的计数函数count() 给查找的列计数。
  2. 分类汇总后,生成一个辅助表,可以从该子表中筛选查找列出计数大于1的元素,即重复的需要查找的内容。
  3. 使用辅助表结合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. 分组比较

  1. 先连接多表,在使用子表进行查询,注意保持查询的条件顺序与辅助子表一致。
  2. 每当出现“每”就是要用分组汇总了,所以是子句(group by 分组列)
  3. 查询最好,最优等,使用max(), 同理,最差,最小用min()

延伸——TOPN 问题

==思路1 ==

== 思路2 ==

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!