gpt4 book ai didi

mysql - 返回空值的简单 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 04:32:11 27 4
gpt4 key购买 nike

我刚开始研究 SQL 查询。我正在这个网站上练习:https://www.techonthenet.com/sql/joins_try_sql.php

我想找到:

"the name of the employee with the highest salary for every department".

我的查询是:

SELECT first_name, max(salary) FROM employees, departments 
WHERE departments.dept_id=employees.dept_id
GROUP BY employees.dept_id

我得到了 first_name 的空值: query result我知道问题是由于 group by 表达式引起的。但是我该如何解决呢?

表格: query result

最佳答案

您也可以像下面这样使用row_number(),除非您需要显示部门名称,否则不需要加入部门表:

Select e.*
from employees e
INNER JOIN
(
SELECT e.id, e.dept_id. e.first_name,
rn=row_number() over (partition by e.dept_id order by e.salary desc)
FROM employees e
) x ON x.id = e.id
where x.rn = 1

编辑

(因为 OP 不想使用 row_number() 函数 amd 结果查询将在 mysql 而不是 sql server 中使用)-> 你能试试这个吗:

select em.*
from employees em, (
Select dept_id, max(salary) salary
from employees e
group by dept_id
) x on x.dept_id=em.dept_id and x.salary = em.salary

这应该可行,但据我所知,在线编译器不接受与子查询的连接。在这种情况下,我能想到的最简单的解决方案:

select em.*
from employees em
where salary = (select max(salary) from employees em2 where em.dept_id = em2.dept_id)

关于mysql - 返回空值的简单 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58997730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com