[Mysql] FIRST_VALUE()函数 | LAST_VALUE()函数 | NTH_VALUE()函数
生活随笔
收集整理的這篇文章主要介紹了
[Mysql] FIRST_VALUE()函数 | LAST_VALUE()函数 | NTH_VALUE()函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
美圖欣賞2022/06/04
窗口函數的基本語法
<窗口函數> OVER ([PARTITION BY <用于分組的列>] ORDER BY <用于排序的列>)※ []中的內容可以省略
注意:Mysql從8.0版本才開始支持窗口函數
數據導入
DROP TABLE IF EXISTS order_content; CREATE TABLE order_content( order_id VARCHAR(8), user_id VARCHAR(8), order_price INT, order_date DATE ) ENGINE = InnoDB DEFAULT CHARSET = utf8; INSERT INTO order_content (order_id,user_id,order_price,order_date) VALUE ('o001','u001',800,'2021-06-18') ,('o002','u001',800,'2021-06-19') ,('o003','u001',1000,'2021-06-22') ,('o004','u001',1200,'2021-06-24') ,('o005','u002',400,'2021-06-25') ,('o006','u002',1500,'2021-06-26') ,('o007','u002',2100,'2021-06-28') ,('o008','u003',900,'2021-07-01') ,('o009','u003',700,'2021-07-03') ,('o010','u003',1700,'2021-07-04');order_content表?
1.FIRST_VALUE()函數
FIRST_VALUE()函數用于返回當前第一個值
SELECT *,FIRST_VALUE(order_price) OVER (PARTITION BY user_id ORDER BY order_price) AS firstvalue FROM order_content;結果展示:
按照user_id字段進行分區,FIRST_VALUE()函數返回了每個分區的order_price字段的第一個值
2.LAST_VALUE()函數
LAST_VALUE()函數用于返回當前最后一個值
SELECT *,LAST_VALUE(order_price) OVER (PARTITION BY user_id ORDER BY order_price)AS lastvalue FROM order_content;結果展示:
當前最后一個值即當前值,所以order_price和lastvalue字段的值相同
3.NTH_VALUE()函數
NTH_VALUE()函數用于返回有序行的第n小的值
SELECT *,NTH_VALUE(order_price,3) OVER (PARTITION BY user_id ORDER BY order_price)AS nthvalue FROM order_content;結果展示:
NTH_VALUE()函數返回了每個分區第3小的數據,所以NTH_VALUE()函數通常用來求排在第n位的數據。例如,查詢部門薪資排在第2位的員工信息,而返回排在第n位的數據只需要在ORDER BY之后添加DESC
總結
以上是生活随笔為你收集整理的[Mysql] FIRST_VALUE()函数 | LAST_VALUE()函数 | NTH_VALUE()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AspectJ 实现代理
- 下一篇: 记一次面试的尴尬,说说作为数据库工程师,