我有一个Postgres表,如下所示:
id | value | category
0 | 10 | a
1 | 11 | b
2 | 50 | b
3 | 20 | a
并且我希望得到以下代码(当然,最后一列中的表达式是在这里求值的):
id | value | category | weight
0 | 10 | a | 10 / (10+20)
1 | 11 | b | 11 / (11+50)
2 | 50 | b | 50 / (11+50)
3 | 20 | a | 20 / (10+20)
通过使用2个查询,您可以首先使用select category, sum(value) from table0 group by category
将每个类别的总计聚合到一个临时表中,然后将原始表除以临时表(通过匹配类别)。
但是我怎样才能在Postgres中通过一个查询来完成这个任务呢?
2条答案
按热度按时间8nuwlpux1#
您可以使用window function来实现这一点:fiddle
| 身份证|价值|范畴|第1部分|
| - ------|- ------|- ------|- ------|
| 无|十个|项目a|0.33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333|
| 1个|十一|B|0.18032786885245901639|
| 第二章|五十|B|0.81967213114754098361|
| 三个|二十个|项目a|0.6666666666666666666667|
jmp7cifd2#
希望这能帮到你
首先创建名为“t”的表
将数据插入表中
表中数据
立即查询
结果