我有兩個表,當我加入并分組時,我可以對Hours列求和,但Unpaid_Balance列會被聚合多次。例如,史密斯總共作業了 21 小時,他的每小時工資是 30 美元,因此等于 630 美元。在計算出 630 美元后,我想加上他Unpaid_Balance的 400 美元,總計 1,030 美元,但我得到的是 630 美元 400 美元 400 美元 400 美元或 1,830 美元。
怎么可能對列進行分組和聚合,在這種情況下Hours,乘以 30 美元,然后在進行分組Unpaid_Balance 后添加?以下是我的代碼,我也嘗試過SUM((Hours*30)) Unpaid_balance as amount_due,但沒有奏效。
select
workers.name,
SUM((Hours*30) Unpaid_Balance) as amount_due
FROM Workers
LEFT JOIN hours
ON workers.id = hours.id
GROUP BY workers.name
ORDER BY workers.name;
Table 1
ID Hours
1 5
1 5
1 8
2 10
Table 2
ID Name Unpaid_Balance
1 Smith 400
2 Ryan 10
uj5u.com熱心網友回復:
如果Unpaid_Balance每個人的任何小時都是固定的,那么只需為此列添加另一個聚合,例如MAX()或MIN()
SELECT w.name, SUM(Hours * 30) MAX(Unpaid_Balance) AS amount_due
FROM Workers w
LEFT JOIN hours h
ON w.id = h.id
GROUP BY w.name
ORDER BY w.name;
uj5u.com熱心網友回復:
您應該首先從hours表格中計算總作業時間,然后將hours表格的匯總結果與workers表格連接起來,這應該可以
select workers.name,(total_hours.hours * 30 Unpaid_Balance) from workers left join
(select sum(hours) hours,id from hours group by id) total_hours on total_hours.id = workers.id
在 Postgres 中運行示例在這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464769.html
標籤:sql PostgreSQL 总计的
下一篇:如何根據最小日期間隔合并間隔?
