如何groupby然后加一个值

How to groupby and then add a value

我有两个表,当我加入并进行分组时,我能够对 Hours 列求和,但 Unpaid_Balance 列会多次聚合。例如,Smith 总共工作了 21 小时,他的时薪是 30 美元,所以总计 630 美元。在计算出 630 美元后,我想加上他的 Unpaid_Balance,即 400 美元,总计 1,030 美元,但我得到的是 630 美元 + 400 美元 + 400 美元 + 400 美元或 1,830 美元。

如何分组并聚合列,在本例中为 Hours,乘以 $30,然后添加 Unpaid_Balance after 做群友?下面是我的代码,我也尝试了 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

如果 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;

您应该先从 hours table 计算总工时,然后将 hours table 的汇总结果与 workers table,应该可以

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

Running example in Postgres is here