一、复杂查询
1、按行合并
1.1 union
1.2 union all
2、按列合并,join关联查询
2.1 left join
2.2 right join
2.3 inner join
2.4 更多join
2.5 主表
a left join b on a.f = b.f,此时a为主表;b right join a on a.f = b.f,a还是主表。
到底把谁作为主表去left join呢?
以谁为视角去查别的信息,这个谁就当作为主表。比如上述示例想查日志表中的用户的姓名,就是拿日志表中的user_id去用户表中关联user_id查姓名,当然日志表就是主表喽。
更多查看公众号文章《如何确定主表 》
2.6 用on过滤
on中除了a.f = b.f外,还可用其他运算符,on a.f = b.f and a.f1 < b.f2
漏斗分析时经常会有on中过滤的写法。
参考后续文章《漏斗模型》
3、表关系
3.1 一对多
3.2 多对一
3.3 多对多
3、case when then end
4、中间表
5、with子查询
6、:=赋值参与查询
二、复杂统计
在今天复杂查询的sql上,包装一层统计,就可以快速实现很多复杂统计逻辑。
1、排名
2、inner做过滤后统计
3、case_when的统计
4、统计合并
5、维度表参与统计
6、用户标签