mysql8.0 partition by和 lag()和lead()函数的实战案例
2024-01-02 12:43:26
接上篇:MySQL8.0 ROW_NUMBER 调用案例: link
1、将销售额 向后滚动,得到前一次的销售额 进行比较
SELECT
t.shopname, -- 商店名称
t.sales, -- 销售额
t.sale_date, -- 销售日期
-- 使用窗口函数LAG()来获取每个商店前一次的销售额
--lag(sales,1)表示将sales 列向后移动1行,即得到前一次的销售额
lag(t.sales,1) over(PARTITION by shopname ORDER BY sale_date) as lag_value
FROM
chapter11 t;
2、计算差值
-- 主查询
SELECT
shopname, -- 商店名称
sale_date, -- 销售日期
sales, -- 销售额
lag_value, -- 前一次的销售额(基于shopname和sale_date分组)
sales - lag_value AS sales_difference -- 当前销售额与前一次销售额的差异
FROM (
-- 子查询
SELECT
t.shopname, -- 商店名称
t.sale_date, -- 销售日期
t.sales, -- 销售额
LAG(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lag_value -- 使用窗口函数LAG获取每个商店前一次的销售额
FROM
chapter11 t -- 从chapter11表中选择数据,别名为t
) AS subquery; -- 子查询的别名是subquery
3、将销售额 向前滚动,得到前一次的销售额 进行比较
-- 主查询
SELECT
t.shopname, -- 商店名称
t.sales, -- 销售额
t.sale_date, -- 销售日期
LEAD(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lead_value -- 使用窗口函数LEAD获取每个商店下一次的销售额
FROM
chapter11 t; -- 从chapter11表中选择数据,别名为t
4、计算差值
-- 主查询
SELECT
shopname, -- 商店名称
sale_date, -- 销售日期
sales, -- 销售额
lead_value, -- 下一次的销售额(基于shopname和sale_date分组)
lead_value - sales AS sales_difference -- 当前销售额与下一次销售额的差异
FROM (
-- 子查询
SELECT
t.shopname, -- 商店名称
t.sales, -- 销售额
t.sale_date, -- 销售日期
LEAD(t.sales, 1) OVER(PARTITION BY shopname ORDER BY sale_date) AS lead_value -- 使用窗口函数LEAD获取每个商店下一次的销售额
FROM
chapter11 t -- 从chapter11表中选择数据,别名为t
) AS subquery; -- 子查询的别名是subquery
文章来源:https://blog.csdn.net/weixin_47139678/article/details/135328571
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!