聚合函数
- 项目员工,连接 + avg + group by
- 各项函数用户的注册率:直接单表操作,count函数的使用,结合round进行保留小数。
- 1211. 查询结果的质量和占比:简单的
avg
,sum(if(,,))
的使用 - 1193. 每月交易 I:年月日期函数的应用。
data_format(date, '%Y-%m')
获取类似01 02
的这种月份。 - 550. 游戏玩法分析 IV:连接后where过滤,on其实也可以起到过滤的作用。不过最好用where进行过滤。
- 1174. 即时食物配送 II:每一行加上一个最小值列,然后让配送时间等于最小值列的时间,选出这个的数量 / 不同用户的数量。
排序和分组
1045. 买下所有产品的客户:简单分组, having子句过滤
619. 只出现一次的最大数字:子查询 + 分组 + 过滤
1084. 销售分析III:distinct的使用,可以从数量上进行统计。在这个区间的数量等于总的数量。
having count(sale_date between '' and '' or null)
:注意如果为空的情况
1141. 查询近30天活跃用户数:datadiff和<=处理时间
2356. 每位教师所教授的科目种类的数量:分类计数,分类计数,分类计数。使用group by。
子查询
- 换座位:和最小的进行比较,然后使用case when进行选择
- 部门排名前3的薪水
高级连接查询
- 1907. 按分类统计薪水:列转行
- 1204. 最后一个能进入巴士的人:如果存在超重的人,第一个超重的人(超重的人中turn最小的那一个)它的前一个就是,如果没有,最大的turn对应的人。ifnull放的位置。
- 1164. 指定日期的产品价格:找到小于规定日期的最大日期,然后进行连接,过滤可以得到有修改的。最后通过product_id临时表连接这个表,使用ifnull(price, 10)得到答案。
- 180. 连续出现的数字:连接或者子查询都可以
- 判断三角形:ABS(x - y),保证任意两边之和大于第三边,任意两边只差小于第三边
- 1731. 每位经理的下属员工数量:count(id):如果id是null的情况下,会统计成0.
- 1789. 员工的直属部门:union使用的范例。
子查询
- 585. 2016年的投资:不用连接可以直接子查询。
- 1321. 餐馆营业额变化增长:distinct的使用
小结
行列转换:
-
union :纵向,可以统计一行,然后union起来。
-
join: 横向,可以统计一列,然后通过rowId或者其他连接点,连接起来。