Pri*_*oor 3 mysql sql select sql-order-by
我有一个包含 3 列的表:
Name department salary
如何确定使用一个查询来查找salary每个查询中的第三高department?
一种方法是LIMIT关联子查询,但它并不是特别有效:
SELECT department, (
SELECT salary
FROM my_table t2
WHERE t2.department = t1.department
ORDER BY salary DESC
LIMIT 2, 1
)
FROM my_table t1
GROUP BY department
Run Code Online (Sandbox Code Playgroud)
除了eggyal的出色回答之外,这里还有一个查询,它也会为您提供工资等于第三(在每个部门)的人的姓名:
SELECT
t.name, t.department, t.salary AS third_salary
FROM
( SELECT DISTINCT department
FROM tableX
) AS d
JOIN
tableX AS t
ON t.department = d.department
AND t.salary =
( SELECT tt.salary -- notice that this
FROM tableX AS tt -- subquery is
WHERE tt.department = d.department -- exactly the same as
ORDER BY tt.salary DESC -- the one in
LIMIT 1 OFFSET 2 -- @eggyal's answer
) ;
Run Code Online (Sandbox Code Playgroud)