SQL框架
SQL语句书写顺序
SQL语句执行顺序
case when记录
1
CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END
CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END
2
case when CAST(salary as float) < 5000 then "五千"
else NULL end
1 查询不在表里的数据问题
例如 a学生表排除b学生表问题
a表 left join b表,然后通过b.xxx is null 来过滤b表
2 TOP N问题
1
2 每个部门第二高收入员工
开窗函数写法
3 连续n次问题
方法1 查询连续3次相同的成绩,一张表复制成三分join
方法2 开窗函数
过滤 on 和 where 的区别
Why ?
where是两个表同时过滤,条件不为真则完全过滤
如left join即使条件不为真也会返回左表的数据然后拼接null
例子:
表1:tab1
id size
1 10
2 20
3 30
表2:tab2
size name
10 AAA
20 BBB
20 CCC
select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=’AAA’
1 10 10 AAA
select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=’AAA’)
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)
用on时也会展示左表数据并拼接null
分组前百分之20问题
运用 ntile 分组取第一个方式