ToB企服应用市场:ToB评测及商务社交产业平台

标题: mysql中的lead函数和over函数 [打印本页]

作者: 雁过留声    时间: 2024-9-28 14:15
标题: mysql中的lead函数和over函数
mysql中的lead函数和over函数

作用

over函数是用来分组加排序的,然后等over函数分好组排好序之后,再利用lead函数去找当前分组内的下一行数据的某个字段值,具体是哪个字段由over函数指定,如果当前分组内没有下一条数据的话,那么返回null空值。
需求场景

我们有一个销售表,有很多类型的产品,我们想要根据产品id分组,然后再根据产品销售时间排序,我们想要显示下个月的销售额,以及下个月增加的销售额。
上面这个场景需求就是可以利用lead函数联合over函数来实现。
实现方法

首先看一下我们的销售表结构,如下图:

然后看一下里面我们存储的数据,如下图:

接着来看下我们执行的sql语句如下:
  1. SELECT
  2.     product_id,
  3.     sales_date,
  4.     sales_amount,
  5.     LEAD(sales_amount) OVER (PARTITION BY product_id ORDER BY sales_date) AS next_sales_amount,
  6.     (LEAD(sales_amount) OVER (PARTITION BY product_id ORDER BY sales_date) - sales_amount) AS growth_amount
  7. FROM
  8.     sales_data;
复制代码
我们上面查询的时候追加了两个字段,一个是next_sales_amount,也就是分组内下一条数据的销售额;别的一个是growth_amount,也就是销售额增长量,也就是分组内下一条数据的销售额减去当前销售额;
over函数的功能:现根据product_id产品id举行分组,分组完之后又根据sales_date销售日期举行排序,然后取出当前行的销售额sales_amount;
lead函数的功能:取出当前分组的下一条数据的某个字段的值,如果当前分组内已经是最后一条数据了,那么会返回null。
上面的sql语句的执行结果,如下图:

group by分组和利用over函数分组有什么区别?

1.输出结果差异

2.适用场景差异


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4