为什么这个SQL字符串不起作用?

时间:2012-12-12 23:09:49

标签: mysql sql oracle join

我必须得到所有job_titles的清单以及在那里工作的人的工资总额......

我得到了这个:

SELECT j.job_title, SUM(e.salary)
FROM jobs j LEFT JOIN employees e ON e.job_id = j.job_id
GROUP BY j.job_title;

好的,但现在我得到同样的名单,但也考虑了这个城市......

它不起作用......:/

SELECT j.job_title, SUM(e.salary), d.department_id, l.city
FROM departments d LEFT JOIN employees e ON e.department_id = d.department_id LEFT JOIN locations l 
ON l.location_id = d.location_id LEFT JOIN jobs j ON e.job_id = j.job_id 
GROUP BY l.city;     

为什么会这样?

4 个答案:

答案 0 :(得分:5)

您还需要在group by子句中添加这些列:j.job_titled.department_idl.city

SELECT..
FROM...
GROUP BY j.job_title, d.department_id, l.city

非聚合列必须包含在GROUP BY子句中。

答案 1 :(得分:0)

我认为你只需按department_id和job_title进行分组:

GROUP BY j.job_title, d.department_id, l.city;

答案 2 :(得分:0)

您需要按非聚合列进行分组;

...
group by job_title, department_id, city

您还可以通过以下方式使用组中的列位置:

group by 1, 3, 4

答案 3 :(得分:0)

你只是l.city组,但在select语句中你使用j.job_title,d.department_id所以为了获取这些值你必须使用

group by job_title, department_id, city