简介:计算/统计需要随着遍历记录集的每一条记录而持续进行。
场景:比如有一个库存料卷表,一条料卷对应一条记录。料卷记录上有一个【箱号】的字段。我要查询每个卷的时候,加一个字段显示箱的重量。这时候,相当于站在卷的角度来看整箱有多重,就要用到窗口函数了,这样可以有效避免掉臃肿的子查询或者group by。
原始数据如下:
一个卷一条数据,卷上有箱号,多个卷可以属于同一箱号。
①我想查询的时候,加一个字段【箱重】,箱重就是它下面的卷的总重。如下图
代码如下
select
coil_no as 卷号,
box_no AS 箱号,
net_weight AS 卷重,
sum(ifnull( net_weight, 0 )) OVER (PARTITION BY box_no ) AS 箱重
FROM mes_inventory_coil_back0318
②我想查询的时候,加一个字段【箱重】,箱重就是它下面的卷按重量排序且重量小于等于此卷的卷的总重。如下图
代码如下
select
coil_no as 卷号,
box_no AS 箱号,
net_weight AS 卷重,
sum(ifnull( net_weight, 0 )) OVER (PARTITION BY box_no ORDER BY net_weight ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 箱重
FROM mes_inventory_coil_back0318
这样,就省去了繁琐臃肿的子查询或者group by。大大提升了执行效率以及提高了代码可阅读性。