You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列的单行值除以另一列按分组聚合后的值并保留单行数据?

如何将列的单行值除以另一列按分组聚合后的值并保留单行数据?

嘿,你的思路其实已经非常接近正确答案了,只是不小心把分子分母搞反啦!

你想要实现的是每行的score 2值除以同name分组下所有score 1的总和,同时保留每一行的原始数据——这种需求刚好可以用窗口函数完美解决,窗口函数的优势就是能在不聚合行的前提下,给每行计算出对应的分组聚合值。

正确的SQL查询语句

SELECT 
    name,
    "score 1" AS score1,
    "score 2" AS score2,
    "score 2" / SUM("score 1") OVER (PARTITION BY name) AS "score % 2"
FROM your_table_name;

为什么你的原写法不对?

你之前写的Score 1/SUM(Score 2) OVER (PARTITION BY Name),一是把要用来做除法的列搞反了(应该用score 2当分子,分组后的score 1总和当分母),二是如果你的列名带空格,记得用引号或者反引号包裹,避免语法错误。

用你的测试数据验证结果

假设你的表数据是:

namescore 1score 2
reed3010
reed5020
brick6030
brick6012

运行上面的查询后,会得到你想要的结果:

namescore1score2score % 2
reed30100.125
reed50200.25
brick60300.25
brick60120.1

这里要提一句,你示例里最后一行的10/(60+60)应该是笔误,实际是12/(60+60)=0.1哦。

总结一下:这种需求完全是可行的,窗口函数就是专门用来处理这种“既要分组计算聚合值,又要保留单行原始数据”的场景,只要调整好分子分母的对应关系就可以啦!

备注:内容来源于stack exchange,提问作者sasakikoji928

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:07:31