如何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
我有两个表,当我加入并进行分组时,我能够对 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