postgresql一起将一些值汇总在一起,而不是其他值

问题描述 投票:0回答:2
SELECT t.id, sum(o.amount), t.parent_id FROM tab t LEFT JOIN order o ON o.deal = t.id GROUP BY t.id

电流输出:

Idsumparent_id1102103155430550608708820
固定的逻辑,如果该行包含parent_id,则跳过它,但将所有内容添加到“总和”字段中,因此对于ID 3,4,5,总计为45,仅显示ID 5。在某些情况下,总和在“子选项卡”或“主选项卡”中,但所有内容都应求和在一起。

既定的输出:

Idsumparent_id110210545820
到目前为止,我尝试的是进行子选择,并与Group一起玩。有人可以将我指向正确的方向吗?

postgresql aggregate-functions
2个回答
1
投票
with the_data(id, sum, parent_id) as ( values (1, 10, null), (2, 10, null), (3, 15, 5), (4, 30, 5), (5, 0, null), (6, 0, 8), (7, 0, 8), (8, 20, null) ) select coalesce(parent_id, id) as id, sum(sum) from the_data group by 1 order by 1

在文档中阅读有关该功能的信息。
db<>fiddle.

您的查询在postgresql中无效:

SELECT t.id, sum(o.amount), t.parent_id FROM tab t LEFT JOIN order o ON o.deal = t.id GROUP BY t.id

UnikeMySQL,PostgreSQL没有隐式列(除非最近发生了变化)。

0
投票
GROUP BY

子句中使用

t.id
,则每个
GROUP BY

将产生一行,因此您始终将3和4分开。

看起来您正在尝试将
t.id

用作分组的主要标准,当

parent_id

id
时倒在
parent_id
时。
您可以使用

NULL

来获取每一行的值,然后使用它进行分组。

例如:
COALESCE(t.parent_id, t.id)
	
© www.soinside.com 2019 - 2025. All rights reserved.