SQL开窗统计中位数

假设有一个表 sales,包含 amount 列和 category 列,我们想要按 category 分组,计算每个分组的中位数(50%百分位数):

SELECT
    category,
    PERCENTILE_APPROX(amount, 0.5) OVER (PARTITION BY category) AS median_amount
FROM
    sales;

在这个例子中,PERCENTILE_APPROX 函数与 OVER 子句结合使用,按 category 分组计算每个分组的中位数。PARTITION BY category 表示对 category 列的值进行分组,PERCENTILE_APPROX(amount, 0.5) 计算每个分组的中位数。

注意事项

  1. 数据类型expr 列的数据类型必须是数值类型,如 INTDOUBLE

  2. 性能优化accuracy 参数可以调整近似计算的精度。较大的 accuracy 值会提高计算精度,但可能会增加计算时间和内存开销。

  3. 空值处理PERCENTILE_APPROX 会忽略 NULL 值。

通过结合 PERCENTILE_APPROXOVER,可以灵活地对分组数据或分区数据进行百分位数的近似计算,适用于大规模数据集的分析场景。

点击链接查看和 Kimi 的对话 https://kimi.moonshot.cn/share/cvlqnmjbpak5kde9dif0

SQL中,窗口函数(Window Function)是一种特殊的内置函数,它允许我们在查询结果集的基础上创建一个"窗口",并在这个窗口内进行计算或聚合操作,而不仅仅是在单行数据上。这些函数通常在`OVER()`子句中定义,这个子句指定了用于计算的范围分组依据。 窗口函数的主要特点包括: 1. **分区**(Partitioning):根据一个或多个列对数据进行分组,每个分区内的数据会单独应用窗口函数。 2. **排序**(Ordering):可指定按一个或多个列进行排序,这对于窗口函数中的排名、累积滑动窗口很有用。 3. **范围**(Rangings):如Row Number, Rank, Dense Rank等函数会为每个分区分配一个唯一的顺序;Lead/Lag函数则可用于查看当前行之前或之后的数据。 4. **累计值**(Cumulative Sum/Average):如Sum()、Count()等会在每一行基础上累加或计数,直到窗口结束。 常见的窗口函数有: - ROW_NUMBER():为每行分配一个唯一数字,从1开始。 - RANK()DENSE_RANK():类似ROW_NUMBER,但如果有相同的值,RANK会跳过,DENSE_RANK则连续。 - LAG()LEAD():返回当前行前后的值。 - SUM(), AVG(), COUNT()等:计算指定列的累积总、平均值或数量。 - PERCENTILE_CONT() and PERCENTILE_DISC():计算指定百分位的值。 窗口函数常用于分析报告、滚动统计以及复杂的数据分组场景。例如,你可以计算某段时间内销售额的移动平均或找出某个产品的排名变化趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值