【问题标题】:MySQL construct query with JOIN + GROUP + foreign keyMySQL 使用 JOIN + GROUP + 外键构造查询
【发布时间】:2020-04-07 14:30:49
【问题描述】:

我有一个如下图所示的薪金表。员工编号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.salaries.salary” 它在功能上不依赖于 GROUP BY 子句中的列; 这与 sql_mode=only_full_group_by 不兼容

有没有办法构造这个查询,让它显示最高的salary v 每个emp_no?我正在尝试构建一个正确的查询 - 不是 sql_mode=only_full_group_by

的解决方法

【问题讨论】:

  • emp_nosalaries表的主键吗?
  • 是外键

标签: mysql sql database


【解决方案1】:

我建议使用别名:

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】:

    有没有办法构造这个查询,以便它向我显示每个 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() 返回每​​个组中最大的可用值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 2017-06-13
      • 2015-09-23
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多