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_no
是salaries
表的主键吗?
是外键
【参考方案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