如何在结果集中包含列而不将其包含在group by子句中或对其执行任何聚合?

时间:2012-06-04 19:09:56

标签: sql

给定一个包含City,EmpName和Salary的列表,按城市和EmpName排序,如何输出每个EmpName和Salary以及每个城市的总薪水?

这是我所拥有的:

按省份从表格组中选择EmpName,sum(Salary);

但它给了我错误,因为我没有在group by子句中包含EmpName和/或我没有对它执行任何聚合。我怎样才能达到预期的效果?有帮助吗?

2 个答案:

答案 0 :(得分:1)

如果您想要的是每个员工在城市中的工资总和,那么您有两种选择。第一个应该适用于几乎所有数据库:

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

答案 1 :(得分:0)

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;