Oracle SQL如何按centile分组并计算其他列的总和与平均值
Oracle按概率划分分位的统计查询方案
你可以使用Oracle的NTILE窗口函数实现需求,以下是适配你场景的单条查询:
如果是你示例的四分位场景,SQL如下:
WITH ranked_data AS ( SELECT Score, Probability, NTILE(4) OVER (ORDER BY Probability DESC) AS quartile FROM your_table -- 替换为实际表名 ) SELECT quartile, COUNT(*) AS Sum_observations, SUM(Score) AS Sum_score, ROUND(AVG(Probability), 2) AS Avg_probability -- 保留2位小数和示例格式对齐 FROM ranked_data GROUP BY quartile ORDER BY quartile ASC;
如果需要按百分位(centile)分组,仅需要做两处修改:
- 将
NTILE(4)的参数改为100,即NTILE(100) - 将输出的字段名
quartile改为centile即可
说明
- 窗口函数中指定
ORDER BY Probability DESC是为了和你示例的分位排序逻辑对齐:概率最高的组排在第1位,概率最低的组排在最后一位,如果需要反过来调整排序方向即可 - 如果你的数据量无法被分位数量整除,
NTILE会自动将多余的条目均匀分配给靠前的分位,属于标准的分位划分逻辑
内容的提问来源于stack exchange,提问作者Piotr94
相关产品推荐
相关产品推荐

