(篇十)MySQL内置函数续

目录

控制流函数

⚽计算各个职位的年薪,如果是董事长按照15薪算,总经理13薪,其余都为12薪

⚽计算所有职位提成之和

窗口函数(基础)

⚽查询2019年每月支付总额和当年累计支付总额

⚽查询2019年每个月的近三个月移动平均支付金额

⚽2020年1月,购买商品品类数的用户排行


控制流函数

(篇十)MySQL内置函数续_第1张图片

(篇十)MySQL内置函数续_第2张图片以这张职位薪资表为例:

计算各个职位的年薪,如果是董事长按照15薪算,总经理13薪,其余都为12薪

使用if(v1,v2,v3):

(篇十)MySQL内置函数续_第3张图片

使用case when...then..else..end:

语法

case

when exrp1 then exrp2

...

end 

必须end结束

(篇十)MySQL内置函数续_第4张图片

第一种使用就类似java中的if()else if()

第二种则是类似switch()case:

计算所有职位提成之和

在MySQL中,NULL 值具有特殊的性质,当它与其他值进行算术运算时,结果通常是 NULL

所有我们需要判断值是否是null,如果为null我们可以替换为0进行计算。

所以就可以采用ifnull(arg1,arg2)

窗口函数(基础)

        窗口函数,也叫分析函数,是为了解决需要在单表中满足某些条件的结果集内部做一些函数操作的需求的。

窗口函数是MySQL8.0之后才支持的写法。

语法:select 查询内容 over() from

over()括号内若不写,则意味着窗口函数基于满足where条件的所有行进行计算。

括号中可以写:

over(partition by < 要分列的组 > order by < 要排序的列 > rows between < 数据范
>)
数据范围:
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()),二者之间以空格分割

案例

(篇十)MySQL内置函数续_第5张图片

查询2019年每月支付总额和当年累计支付总额

(篇十)MySQL内置函数续_第6张图片

(篇十)MySQL内置函数续_第7张图片

查询2019年每个月的近三个月移动平均支付金额

(篇十)MySQL内置函数续_第8张图片

(篇十)MySQL内置函数续_第9张图片

2020年1月,购买商品品类数的用户排行

(篇十)MySQL内置函数续_第10张图片

(篇十)MySQL内置函数续_第11张图片

三种排序方式:
row_number():每一行记录生成一个序号,依次排序且不会重复。 1234...
   rank():   跳跃排序,生成的序号有可能不连续。1134..
dense_rank():在生成序号时是连续的。1123...

你可能感兴趣的:(MySQL,mysql,数据库)