employee Table;
+--------+------------------+
| emp_id | emp_name salary |
+--------+----------+--------+
| 1 | James | 2000 |
| 2 | Jack | 4000 |
| 3 | Henry | 6000 |
| 5 | John | 8000 |
| 6 | Martin | 6000 |`
| 7 | Deny | 6000 |
我想要第二高的薪水&根据表格,第二高的薪水是:-
+--------+------------------+
| emp_id | emp_name salary |
+--------+----------+--------+
| 3 | Henry | 6000 |
| 6 | Martin | 6000 |`
| 7 | Deny | 6000 |
我怎样才能做到这一点?
我不能用:-
select * from employee order by salary desc Limit 1,1
因为它总是只显示一张唱片。
任何帮助都将不胜感激。
谢谢!!!
6条答案
按热度按时间pw9qyyiw1#
如果您正在使用
MySQL 8.0
或者更高版本,你可以试试DENSE_RANK()
窗口函数,请参阅此处的文档。rjee0c152#
您可以在内联子查询(括号中的查询)中选择小于最大值的立即值,然后根据它返回的结果运行select query:
eqoofvh93#
谢谢大家的回复。
我尝试了以下查询&它对我有效。
nvbavucw4#
sql查询应该是泛型的,以处理第n个最高工资。例如:从下表中,我们需要算出第三/第N高薪。在本例中,应打印b,d。
使用这样的查询:这里n应该是3表示第三高工资,以此类推。
我希望这个通用查询有帮助。
snvhrwxg5#
此查询可用于:
对于数据集,结果如下:
qij5mzcb6#
我倾向于使用子查询:
子查询也可以移动到
from
子句,因为它不相关。它只是订购所有不同的工资和使用limit
/offset
获得第二个。不使用窗口函数(即。dense_rank()
),这似乎是最清晰的解决方案。