2012-06-04 50 views
0

給定一個包含City,EmpName和Salary的列表,按城市和EmpName排序,如何將每個EmpName和Salary輸出爲每個城市的總工資?如何在結果集中包含列而不將其包含在group by子句中或對其執行任何聚合?

以下是我有:

選擇EmpName,從全省表組總和(工資);

但它給了我錯誤,因爲我沒有在group by子句中包含EmpName和/或沒有對它執行任何聚合。我怎樣才能達到預期的效果?任何幫助?

+0

改變選擇爲 「選擇省,SUM(工資)」。 –

+0

但我還需要顯示EmpName以及 –

+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

如果您的RDBMS支持,窗口函數確實可以到這裏。 – cairnz

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; 
相關問題