【问题标题】:Why won't this SQL string work?为什么这个 SQL 字符串不起作用?
【发布时间】:2012-11-30 18:39:09
【问题描述】:

我必须得到一份所有职位的清单以及在那里工作的人的薪水总和......

我用这个得到了:

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;     

为什么会这样?

【问题讨论】:

  • 也许你可以试试INNER JOIN

标签: mysql sql oracle join


【解决方案1】:

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

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

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

【讨论】:

  • 你的最后一句话一般不适用于mysql,但适用于这种情况
  • @Bohemian 如果您通过将 ONLY_FULL_GROUP_BY 模式变量添加到您的 SQL_MODE 系统变量来阻止 GROUP BY 子句的默认行为,这将是真的。
  • 酷。感谢您提供信息 - 不知道该标志。干杯+1
  • 它现在显示无意义的东西:S 但谢谢,现在问题是关于 sql 本身而不是分组。
  • @user1880778 帮助我们解决问题的最佳方式是添加示例记录,并希望得到您的问题。 :D
【解决方案2】:

我认为你只需要按部门 ID 和职位名称进行分组:

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

【讨论】:

    【解决方案3】:

    您需要按非聚合列分组;

    ...
    group by job_title, department_id, city
    

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

    group by 1, 3, 4
    

    【讨论】:

      【解决方案4】:

      您只是按 l.city 分组,但在 select 语句中您使用的是 j.job_title、d.department_id,因此为了获取这些值,您必须使用

      group by job_title, department_id, city
      

      【讨论】:

        猜你喜欢
        • 2020-07-04
        • 2022-01-26
        • 2013-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        相关资源
        最近更新 更多