3列のテーブルがあります:
Name
department
salary
salary
1 つのクエリを使用して、それぞれで3 番目に高いものを見つけるにはどうすればよいdepartment
ですか?
3列のテーブルがあります:
Name
department
salary
salary
1 つのクエリを使用して、それぞれで3 番目に高いものを見つけるにはどうすればよいdepartment
ですか?
1 つの方法は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
egyal の優れた回答に加えて、(各部門で) 3 番目に等しい給与を持っている人の名前も表示するクエリを次に示します。
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
) ;
このRANKの質問は次の質問に似ています: MySQL、ユーザーランクを取得
私はあなたがこれをすることができます:
SELECT s.*,
(
SELECT COUNT(*)
FROM salaries si
WHERE si.salary >= s.salary AND si.department = s.department
) AS rank
FROM salaries s
WHERE s.rank = 3
これを試して:
SELECT name, department, salary
FROM (SELECT name, department, salary, IF(@dept=(@dept:=department), @auto:=@auto+1, @auto:=1) indx
FROM employee e, (SELECT @dept:=0, @auto:=1) A
ORDER BY department, salary DESC ) AS A
WHERE indx = 3;