代码之家  ›  专栏  ›  技术社区  ›  Michael Nelles Kranti Brid

MySQL使用JOIN+GROUP+外键构造查询

  •  0
  • Michael Nelles Kranti Brid  · 技术社区  · 6 年前

    我有一个工资表,如下图所示。员工编号 emp_no 是一把外键。以下查询运行良好:

    SELECT 
    emp_no, ANY_VALUE(salary)
     FROM salaries 
     GROUP by salaries.emp_no 
     LIMIT 0, 500
    

    但如果我尝试按工资DESC排序,它会抛出以下错误:

    错误代码:1055。ORDER BY子句的表达式#1不在GROUP BY中 子句,并包含非聚合列“employees.salarys.salary” 它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode=only_full_group_by不兼容

    有没有一种方法可以构造这个查询,让它显示最高的 salary v每 emp_no ?我正在尝试构造一个正确的查询,而不是一个解决方法 sql_mode=only_full_group_by

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    我建议使用别名:

    SELECT emp_no, ANY_VALUE(salary) as any_salary
    FROM salaries 
    GROUP by salaries.emp_no 
    ORDER BY any_salary DESC
    LIMIT 0, 500
    
        2
  •  1
  •   GMB    6 年前

    是否有方法构造此查询,以便它向我显示每个emp_no的最高工资?

    您似乎在寻找聚合函数 max() 而不是 any_value() :

    select emp_no, max(salary) as max_salary
    from salaries 
    group by emp_no 
    order by max_salary desc
    limit 0, 500
    

    any_value() 正如其名称所示,它为您提供了组中可用值中的任意值(即具有相同值的记录 emp_no ). 另一方面, max() 返回每个组中的最大可用值。