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

Posted

技术标签:

【中文标题】MySQL 使用 JOIN + GROUP + 外键构造查询【英文标题】:MySQL construct query with JOIN + GROUP + foreign key 【发布时间】: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表的主键吗? 是外键 【参考方案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() 返回每​​个组中最大的可用值。

【讨论】:

以上是关于MySQL 使用 JOIN + GROUP + 外键构造查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 MySQL 通过 JOIN 获取 GROUP BY 中的 SUM

MySQL:使用 JOIN 和 GROUP_CONCAT 进行更新

MySQL Join Group By 和 Group Concat

在 JOIN 查询中使用 Mysql GROUP_CONCAT

MySQL:带有LEFT JOIN的GROUP_CONCAT

使用 LEFT JOIN 的 MySQL 视图中的问题... GROUP BY