使用窗口函数统计数据,保留每行数据统计,进行总体分析计算统计

SELECT 
top 10
    ProductNumberId,
    MIN(OrderOn) OVER (PARTITION BY ProductNumberId) AS MinOrderOn,OrderOn,ProductQuantity,    --每个产品的最小时间
             RANK() OVER(ORDER BY ProductQuantity DESC) AS ProductQuantity_rank, -- ProductQuantity全局排名
         SUM(ProductQuantity) OVER(PARTITION BY ProductNumberId     
         --时间排序
         ORDER BY OrderOn
             --游标累加
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS lifetime_value,
        SUM(ProductQuantity) OVER(
        PARTITION BY ProductNumberId 
    ) AS counts,
        -- 过滤统计
        OrderStage,
        SUM(CASE WHEN OrderStage=50 THEN ProductQuantity ELSE 0 END) OVER(PARTITION BY ProductNumberId) as selectCount,
        --统计产品订单数量
        COUNT(*) OVER (PARTITION BY ProductNumberId) AS ProductNumberId_total,
        -- 统计所有订单数量
        COUNT(*) OVER () AS total_count,
        --计算各产品的平均值
         AVG(ProductQuantity) OVER(PARTITION BY ProductNumberId) AS ProductQuantity_avg,
        --计算最近相连3个的平均值
        AVG(ProductQuantity) OVER(
        ORDER BY ProductQuantity desc 
        ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
    ) AS ProductQuantity_3avg
--INTO #ProductOrderTimes
FROM SL_mk_Schema.SalesOrder  where ProductNumberId='000095ae4bbf482c8468fc473d58c2b7' ORDER BY ProductQuantity desc ;

使用窗口函数在保留每条数据的同时,可以计算各个维度的数据进行行数据对比,但是也要注意一下几点

  1. 性能优化:大数据量时,避免对全表使用无分区的窗口函数(如 COUNT(*) OVER()),优先考虑分区或过滤条件。
  2. 空值处理COUNT(*) 统计所有行(包括空值),若需排除空值可用 COUNT(column_name)
  3. 框架控制:通过 ROWS/RANGE 定义窗口范围(如 ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)可实现滑动窗口统计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值