【发布时间】:2014-07-31 11:49:09
【问题描述】:
两张表分别是salary_employee和employee
员工工资
salary_id emp_id salary
员工
emp_id | first_name | last_name | gender | email | mobile | dept_id | is_active
查询n =1,2,3,...任意整数的nth最高工资的所有员工
SELECT a.salary, b.first_name
FROM employee_salary a
JOIN employee b
ON a.emp_id = b.emp_id
WHERE a.salary = (
SELECT salary
FROM employee_salary
GROUP BY salary
DESC
LIMIT 1 OFFSET N-1
)
我的问题:
1) 有没有更好和优化的方法可以查询这个,
2) 使用 LIMIT 是一个不错的选择
3) 我们有更多的选项来计算第 n 高的薪水,哪个是最好的,应该遵循什么,什么时候遵循?
一个选项使用:
SELECT *
FROM employee_salary t1
WHERE ( N ) = ( SELECT COUNT( t2.salary )
FROM employee_salary t2
WHERE t2.salary >= t1.salary
)
使用排名法
SELECT salary
FROM
(
SELECT @rn := @rn + 1 rn,
a.salary
FROM tableName a, (SELECT @rn := 0) b
GROUP BY salary DESC
) sub
WHERE sub.rn = N
【问题讨论】:
-
您已经很好地总结了执行此操作的不同方法。你的实际问题是什么?如果性能是一个问题,您应该在您的系统上使用您的数据尝试不同的方法,然后选择最有效的方法。
-
问题是如何优化查询,问题是什么时候用什么?为什么一个比另一个更好以及它的局限性。
标签: mysql sql greatest-n-per-group