窗口函数sql使用总结

一、开窗

基础知识:窗口分析函数

(1)LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值

第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL);

(2)LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值

第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL);

(3)FIRST_VALUE(col) 取分组内排序后,截止到当前行,第一个值;

(4)LAST_VALUE(col) 取分组内排序后,截止到当前行,最后一个值;

1、查询上一行数据的值。

select * ,lag(product_num,1,null) over(order by save_date asc) as pre_product_num from test_product

2、开窗函数,每行数据记录最大值、最小值、sum 而不是用group by。

用窗口函数,可以查字段所有信息,group by 的select只能是分组字段信息,有些场景很有用

按产品类目分组,查询平均值、最大值、最小值等等

select *, avg(price) over ( PARTITION BY category_name ) AS avg_price,sum(amount) over(PARTITION BY category_name),lag(product_num,1,null) over(order by save_date asc) as pre_product_num

from product

二、rows between的基本使用

基础知识

rows between

  • preceding:往前
  • following:往后
  • current row:当前行
  • unbounded:起点
  • unbounded preceding:表示从前面的起点
  • unbounded following:表示到后面的终点

1、查询前n条数据平局值

select *,avg(product_num) over(order by save_date desc rows BETWEEN unbounded preceding and current row) as avg_n from test_product

2、查询当前行数据前2条到当前行数的和

select *,sum(product_num) over(order by save_date desc rows BETWEEN 2 preceding and current row) as sum_n from test_product

3、查询当前行数据之后的所有行数据的和

select *,sum(product_num) over(order by save_date desc rows BETWEEN current row and unbounded following) as sum_n from test_product

4、查询当前行前1行后1行当前行,3行数据的和

select *,sum(product_num) over(order by save_date desc rows BETWEEN 1 preceding and 1 following) as sum_n from test_product

相关推荐
2501_9336707913 小时前
2027届数学与应用数学转经营分析:SQL、财务指标与业务指标补齐路线
数据库·sql·数学建模
阳光九叶草LXGZXJ1 天前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
阳光九叶草LXGZXJ1 天前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习
镜舟科技1 天前
从 StarRocks 到 MIP:数据平台的下一步是“理解”
starrocks·sql·ai·prompt·agent·context·mip
Seraphina362 天前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
做运维的阿瑞2 天前
SQL 面试高频:用户、商品、订单三表查询全解析
数据库·sql·mysql
做运维的阿瑞3 天前
MYSQL从语义到执行计划:UNION、EXISTS、IN 的深度辨析
数据库·sql·mysql
Moshow郑锴3 天前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
Elastic 中国社区官方博客4 天前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
大数据·运维·数据库·sql·elasticsearch·搜索引擎·全文检索
Seraphina364 天前
DVWA(SQL Injection-High,XSS Reflected-Medium,XSS Stored-Medium)
数据库·经验分享·sql·网络安全·xss