mysql 窗口函数 8.0_MySQL 8.0 窗口函数-笔记

# ROW_NUMBER()  当前行在所有结果里的序号

# CUME_DIST()   累计分布百分比。即 <=a 的行数在所有数据里占的比例

# PERCENT_RANK() 百分比排名。 (rank - 1) / (rows - 1) ,即累计(

SELECT

a,

ROW_NUMBER()   OVER w AS 'row_number',

CUME_DIST()    OVER w AS 'cume_dist',

PERCENT_RANK() OVER w AS 'percent_rank'

FROM tbt

WINDOW w AS (ORDER BY a);

33443953e79896f12463f15d3127c1c3.png

# LAG(expr [, N[, default]]) N 默认是1,default 默认是null

# LEAD(expr [, N[, default]]) N 默认是1,default 默认是null

SELECT

create_time, id,

LAG(id)        OVER w AS '上1行的id',

LEAD(id)       OVER w AS '下1行的id',

LAG(id, 3, 0)  OVER w AS '上3行的id',

LEAD(id, 3, 0) OVER w AS '下3行的id'

FROM tbt

WINDOW w AS (ORDER BY create_time);

7411493a2d406bb983cb83b0b5dfefd2.png

# FIRST_VALUE(val)  同一个分组,第一个值

# LAST_VALUE(val)   同一个分组,最后一个值

# NTH_VALUE(val, N) 同一个分组,第N值

SELECT

a, create_time, id,

FIRST_VALUE(id)  OVER w AS 'first',

LAST_VALUE(id)   OVER w AS 'last',

NTH_VALUE(id, 3) OVER w AS 'third'

FROM tbt

WINDOW w AS (PARTITION BY a ORDER BY create_time);

5def85f1775164f4296e35fb861624b6.png

# NTILE(N) 将同一个partition(如果未定义,则相当于全表) 分为N组,返回当前行所在的组序号

SELECT

a,

ROW_NUMBER() OVER w AS 'row_number',

NTILE(2)     OVER w AS 'ntile2',

NTILE(4)     OVER w AS 'ntile4'

FROM tbt

WINDOW w AS (ORDER BY a);

1d41eedcf4a16849f8f12f62d92cffcd.png

SELECT

a,

create_time,

ROW_NUMBER() OVER w AS 'row_number',

NTILE(2)     OVER w AS 'ntile2',

NTILE(4)     OVER w AS 'ntile4'

FROM tbt

WINDOW w AS (PARTITION BY a ORDER BY create_time);

631bd0f6364634cabec4a67320c6ee0f.png


版权声明:本文为weixin_28756005原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。