直观理解:MySQL常用窗口函数

直观理解:MySQL常用窗口函数,第1张

  窗口函数(window functions),也叫分析函数和OLAP函数,MySQL在8.0之后开始支持窗口函数。窗口函数可以用来对数据进行实时分析处理,和group by有类似之处,其区别在于窗口会对每个分组之后的数据按行进行分别 *** 作,而group by一般对分组之后的函数使用聚合函数汇总,做不到对不同的group中的行数据进行分别 *** 作。这就简单介绍几种常见的MySQL窗口函数。下表中列出了几种常见的窗口函数,并对其基本功能进行了描述。接下来我们会以一段示例,来展示MySQL中窗口函数的用途和效果。

  假设我们存在一张如下的员工工资表,接下来我们将以这张表对窗口函数的使用方法进行简单的演示。

  窗口函数的语法如下,所有的窗口函数均遵循以下语法:

其中 frame_clause 语法如下。

接下来我们将展示一些场景的窗口函数的用法和效果。

示例: 对所有员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名

示例: 对每个部门的员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名

示例: 对所有员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名,最终结果按照员工号进行排序输出。

示例: 找出每个部门工资最高的人。

示例: a.将所有员工按照工资递增的顺序分成4组。b.根据员工入职日期升序分成7组。

示例: 获取每个部门,按工资从低到高得累计和。

示例: 获取每个部门得工资累计和。

示例: 获取整个公司的薪资按照薪资递增的累计和。

示例: 获取整个公司的薪资按照薪资递增的前两行和后一行范围内的薪资和。

示例: 每个部门的平均工资。

示例: 获取整个公司的薪资按照薪资递增的前两行和后一行范围内的薪资平均值。

示例: 根据薪资排序,获取CUME_DIST()和PERCENT_RANK()

示例: a. 获取每个人入职前一行的数据,默认值为"2021-01-01"b. 获取每个人入职前两行的数据,不设置默认值c. 获取每个人入职后一行的数据,默认值为"2022-01-01"d. 获取每个人入职后两行的数据,不设置默认值

示例: a. 按照入职日期顺序排序,找出当前每个部门最先入职的人的薪资。b. 按照入职日期顺序排序,找出当前每个部门最后入职的人的薪资。

示例: a.获取截至当前工资第二高的人的工资。b.获取第二个入职的人的工资。

MySQL的SQRT函数是用来计算出任何数量的平方根。可以使用SELECT语句找出方检定根的任意数如下:

mysql>

select

SQRT(16)

+----------+

|

SQRT(16)

|

+----------+

|

4.000000

|

+----------+

1

row

in

set

(0.00

sec)

所看到的浮点值,因为内部MySQL将处理浮点数据类型的平方根。

可以使用SQRT函数,计算出记录的平方根。了解SQRT函数更详细用法,考虑EMPLOYEE_TBL的表具有以下记录:

mysql>

SELECT

*

FROM

employee_tbl

+------+------+------------+--------------------+

|

id

|

name

|

work_date

|

daily_typing_pages

|

+------+------+------------+--------------------+

|

1

|

John

|

2007-01-24

|

250

|

|

2

|

Ram

|

2007-05-27

|

220

|

|

3

|

Jack

|

2007-05-06

|

170

|

|

3

|

Jack

|

2007-04-06

|

100

|

|

4

|

Jill

|

2007-04-06

|

220

|

|

5

|

Zara

|

2007-06-06

|

300

|

|

5

|

Zara

|

2007-02-06

|

350

|

+------+------+------------+--------------------+

7

rows

in

set

(0.00

sec)

假设根据上面的表格,要计算所有的dialy_typing_pages的平方根,然后可以通过使用下面的命令:

mysql>

SELECT

name,

SQRT(daily_typing_pages)

->

FROM

employee_tbl

+------+--------------------------+

|

name

|

SQRT(daily_typing_pages)

|

+------+--------------------------+

|

John

|

15.811388

|

|

Ram

|

14.832397

|

|

Jack

|

13.038405

|

|

Jack

|

10.000000

|

|

Jill

|

14.832397

|

|

Zara

|

17.320508

|

|

Zara

|

18.708287

|

+------+--------------------------+

7

rows

in

set

(0.00

sec)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8571952.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存