目录
控制流函数
⚽计算各个职位的年薪,如果是董事长按照15薪算,总经理13薪,其余都为12薪
⚽计算所有职位提成之和
窗口函数(基础)
⚽查询2019年每月支付总额和当年累计支付总额
⚽查询2019年每个月的近三个月移动平均支付金额
⚽2020年1月,购买商品品类数的用户排行
使用if(v1,v2,v3):
使用case when...then..else..end:
语法
case
when exrp1 then exrp2
...
end
必须end结束
第一种使用就类似java中的if()else if()
第二种则是类似switch()case:
在MySQL中,NULL 值具有特殊的性质,当它与其他值进行算术运算时,结果通常是 NULL
所有我们需要判断值是否是null,如果为null我们可以替换为0进行计算。
所以就可以采用ifnull(arg1,arg2)
窗口函数,也叫分析函数,是为了解决需要在单表中满足某些条件的结果集内部做一些函数操作的需求的。
窗口函数是MySQL8.0之后才支持的写法。
语法:select 查询内容 over() from 表
over()括号内若不写,则意味着窗口函数基于满足where条件的所有行进行计算。
括号中可以写:
数据范围:
rows between 2 preceding and current row # 取本行和前面两行
rows between unbounded preceding and current row # 取本行和之前所有的行
rows between current row and unbounded following # 取本行和之后所有的行
rows between 3 preceding and 1 following # 从前面三行和下面一行,总共五行
注意:查询内容后面如果跟窗口函数(over()),二者之间以空格分割
案例
三种排序方式:
row_number():每一行记录生成一个序号,依次排序且不会重复。 1234...
rank(): 跳跃排序,生成的序号有可能不连续。1134..
dense_rank():在生成序号时是连续的。1123...