3

3列のテーブルがあります:

Name department salary

salary1 つのクエリを使用して、それぞれで3 番目に高いものを見つけるにはどうすればよいdepartmentですか?

4

4 に答える 4

7

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
于 2013-01-11T17:26:08.743 に答える
5

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
      ) ;
于 2013-01-11T17:33:00.117 に答える
2

この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
于 2013-01-11T19:05:55.113 に答える
0

これを試して:

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;
于 2013-01-11T17:35:00.413 に答える