废话少说我们来看下这题:直接说 leetcode 的写法。
SELECT
e.NAME AS Employee,
e.Salary,
d.NAME AS Department
FROM
department d
LEFT JOIN employee e ON d.id = e.dep_id
WHERE
-- leetcode 解法,多个字段 in 这个可能平时用的少,不容易想到
-- (e.dep_id,e.salary) in (SELECT dep_id, MAX( salary ) AS salary FROM employee
GROUP BY dep_id )
EXISTS (
SELECT
1
FROM
( SELECT dep_id, MAX( salary ) AS salary FROM employee GROUP
BY dep_id ) AS t
WHERE
e.dep_id = t.dep_id
AND e.salary = t.salary
)
还有其他改写方式么?来看看
MySQL 8.0 也支持代码块了,改写后更美观了。可读性更强了
WITH cte AS ( SELECT dep_id, MAX( salary ) AS salary FROM employee GROUP BY
dep_id ) SELECT
e.NAME AS Employee,
e.Salary,
d.NAME AS Department
FROM
department d
LEFT JOIN employee e ON d.id = e.dep_id
WHERE
EXISTS ( SELECT 1 FROM cte AS t WHERE e.dep_id = t.dep_id AND e.salary
= t.salary )
还可以怎么改?MySQL 8.0 同样由 ANY 写法
SELECT
e.NAME AS Employee,
e.Salary,
d.NAME AS Department
FROM
department d
LEFT JOIN employee e ON d.id = e.dep_id
评论