给定一个包含 City、EmpName 和 Salary 的列表,按 city 和 EmpName 排序,如何输出每个 EmpName 和 Salary 以及每个城市的总 Salary?
这是我得到的:
按省从表组中选择 EmpName, sum(Salary);
但它给了我错误,因为我没有在 group by 子句中包含 EmpName 和/或没有对其执行任何聚合。我怎样才能达到预期的效果?有什么帮助吗?
给定一个包含 City、EmpName 和 Salary 的列表,按 city 和 EmpName 排序,如何输出每个 EmpName 和 Salary 以及每个城市的总 Salary?
这是我得到的:
按省从表组中选择 EmpName, sum(Salary);
但它给了我错误,因为我没有在 group by 子句中包含 EmpName 和/或没有对其执行任何聚合。我怎样才能达到预期的效果?有什么帮助吗?
如果您想要的是每个员工在城市的工资总和,那么您有两种选择。第一个应该适用于几乎任何数据库:
select EmpName, tcity.CitySalary
from t join
(select City, sum(Salary) as CitySalary
from t
group by city
) tcity
on tcity.city = t.city
第二种方法是使用窗口函数。值得注意的是,这在 mysql 上不起作用:
select EmptName, sum(salary) over (partition by city)
from t
SELECT t.City, t.EmpName, t.Salary, x.city_salary
FROM table t,
(SELECT City, SUM(Salary) as city_salary
FROM table
GROUP BY City) x
WHERE x.city = t.city;