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
電流輸出:
| ID | 和 | parent_id |
|---|---|---|
| 1 | 10 | |
| 2 | 10 | |
| 3 | 15 | 5 |
| 4 | 30 | 5 |
| 5 | 0 | |
| 6 | 0 | 8 |
| 7 | 0 | 8 |
| 8 | 20 |
所需的邏輯,如果該行包含 parent_id,則跳過它,但將所有內容添加到 sum 欄位中,因此對于 id 3、4、5,總數將為 45,并且僅顯示 id 5。有時總和位于“子選項卡”或“主選項卡”中,但應將所有內容匯總在一起。 期望的輸出:
| ID | 和 | parent_id |
|---|---|---|
| 1 | 10 | |
| 2 | 10 | |
| 5 | 45 | |
| 8 | 20 |
到目前為止,我嘗試過的是進行子選擇并與 group by 一起玩。有人可以指出我正確的方向嗎?
uj5u.com熱心網友回復:
使用合并()。
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
閱讀檔案中的功能。
資料庫<>小提琴。
uj5u.com熱心網友回復:
您的查詢在 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
與 MySQL 不同,PostgreSQL 沒有隱式GROUP BY列(除非最近發生了一些變化)。
無論如何,如果你t.id在你的GROUP BY子句中使用,那么每個t.id都會產生一行,所以你總是有 3 和 4 分開,例如。
看起來您正在嘗試使用 theparent_id作為分組依據的主要標準,而回退到idwhen parent_idis NULL。
您可以使用COALESCE(t.parent_id, t.id)獲取每一行的此值,然后使用它進行分組。
例如:
SELECT
COALESCE(t.parent_id, t.id),
SUM(o.amount)
FROM tab t
LEFT JOIN order o ON o.deal = t.id
GROUP BY COALESCE(t.parent_id, t.id)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/396779.html
標籤:PostgreSQL的
上一篇:如何從sql表中獲取最新版本號
下一篇:計數子查詢太慢了SQL?
