【问题标题】:SQL select query using joins, group by and aggregate functions使用连接、分组和聚合函数的 SQL 选择查询
【发布时间】:2014-01-02 21:37:48
【问题描述】:

我有两个包含以下字段的表

emp_table: emp_id, emp_name
salary_increase: emp_id, inc_date, inc_amount

我需要编写一个查询,提供员工详细信息、员工获得加薪的次数、最大加薪金额和加薪日期。这是我目前所拥有的:

SELECT e.*, count(i.inc_amount), max(i.inc_amount)
FROM salary_increase AS i
RIGHT JOIN emp_table AS e
ON i.emp_id=e.emp_id
GROUP BY e.emp_id;

这正确地给出了除了授予最大增加的日期之外的所有要求。我尝试了以下方法但没有成功:

SELECT e.*, count(i.inc_amount), max(inc_amount), t.inc_date
FROM salary_increase AS i
RIGHT JOIN emp_table AS e
ON i.emp_id=e.emp_id
RIGHT JOIN
    (
    SELECT emp_id, inc_date FROM salary_increase
    WHERE inc_amount=max(inc_amount) GROUP BY emp_id
    ) AS t
ON e.emp_id=t.emp_id
GROUP BY e.emp_id;

这会给出错误“组函数的使用无效”。有谁知道我做错了什么?

【问题讨论】:

    标签: mysql sql join group-by aggregate-functions


    【解决方案1】:

    你不能在 where 子句中这样做 WHERE inc_amount=max(inc_amount),要么使用 HAVING 要么在 join 条件下这样做,试试这个:

    SELECT 
      e.emp_id, 
      e.inc_date,
      t.TotalInc, 
      t.MaxIncAmount
    FROM salary_increase AS i
    INNER JOIN emp_table AS e ON i.emp_id=e.emp_id
    INNER JOIN
    (
       SELECT 
         emp_id,
         MAX(inc_amount)     AS MaxIncAmount, 
         COUNT(i.inc_amount) AS TotalInc
       FROM salary_increase
       GROUP BY emp_id
    ) AS t ON e.emp_id = t.emp_id AND e.inc_amount = t.MaxIncAmount;
    

    【讨论】:

      猜你喜欢
      • 2012-09-28
      • 1970-01-01
      • 2023-02-03
      • 2015-06-18
      • 1970-01-01
      • 2017-10-27
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多