使用 MySQL GROUP BY 查找第三大价值

Pri*_*oor 3 mysql sql select sql-order-by

我有一个包含 3 列的表:

Name department salary

如何确定使用一个查询来查找salary每个查询中的第三高department

egg*_*yal 7

一种方法是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)


ype*_*eᵀᴹ 5

除了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)