sql之每天一个小函数

sql中我们经常会用到聚合函数,聚合之后它会减少数据量,但是如果我们想把聚合之后的数据和原始数据同时展示出来,那么我们需要用到窗口函数。

lag窗口函数通过条件把数据划分成子类,在子类中进行排序
格式 lag(list_name,num) over(partition by ___ order by )
实例:
原始数据:

+----------------+---------------------+----------------+--+
| business.name  | business.orderdate  | business.cost  |
+----------------+---------------------+----------------+--+
| jack           | 2017-01-01          | 10             |
| tony           | 2017-01-02          | 15             |
| jack           | 2017-02-03          | 23             |
| tony           | 2017-01-04          | 29             |
| jack           | 2017-01-05          | 46             |
| jack           | 2017-04-06          | 42             |
| tony           | 2017-01-07          | 50             |
| jack           | 2017-01-08          | 55             |
| mart           | 2017-04-08          | 62             |
| mart           | 2017-04-09          | 68             |
| neil           | 2017-05-10          | 12             |
| mart           | 2017-04-11          | 75             |
| neil           | 2017-06-12          | 80             |
| mart           | 2017-04-13          | 94             |
+----------------+---------------------+----------------+--+

4查询顾客上次的购买时间

select name,orderdate cost, 
lag(orderdate,1) 
over (
partition by name 
order by orderdate) last_time
from business
解析:lag(orderdate,1)
此处是以orderdate为分组,1代表往前1条数据
同理,如果是lead函数,lead(orderdate,1) 则表示往后1条数据

相信大家看了之后还是不明白他有什么用处,精髓就在于将聚合的数据和原始数据一同查询出来,避免了自关联连表的资源占用问题,提高了效率。

举个例子:
我们数据库中有一张百万甚至千万级别的表,现在我们要查询,但是,需要A数据中的m字段和B数据中的n字段进行运算,又恰好你的数据是有一定的规律进行运算的,当然通过表的自关联可以解决,但是对于一张数据量大的表来说,自关联可想而知,效率极低。我们就可以利用窗口函数,在表中直接进行分组排序,运算了,这样不仅减少了资源占用,同时提高了运行效率.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值