繁体   English   中英

如何在employee表中获得每个雇员的第二高薪,employee表中包含多个条目

[英]How to get 2nd highest salary of each employee in employee table which contains more than one entry in employee table

我不是在问员工表中第二高的薪水,而是在问每个员工中第二高的薪水。

点击这里查看员工表

我认为一个非常快速的解决方案可能是这样的:

 SELECT MAX(column) FROM table WHERE column < (SELECT MAX(column) FROM table)

希望能帮助到你-

内部查询将返回薪水最高的员工,然后从查询中过滤掉最高薪水,因此您将获得第二高薪水

 SELECT MAX(T.salery),T.NAME FROM TABLE T
     INNER JOIN (SELECT MAX(salery),NAME FROM TABLE GROUP BY NAME) TT 
      ON TT.NAME=T.NAME AND TT.SALERY!= T.SALERY 
       GROUP BY T.NAME;

mysql> SELECT * FROM payments;
+----+------------+---------+-------+
| id | date       | user_id | value |
+----+------------+---------+-------+
|  1 | 2016-06-22 |       1 |    10 |
|  2 | 2016-06-22 |       3 |    15 |
|  3 | 2016-06-22 |       4 |    20 |
|  4 | 2016-06-23 |       2 |   100 |
|  5 | 2016-06-23 |       1 |   150 |
|  6 | 2016-06-23 |       2 |   340 |
+----+------------+---------+-------+
6 rows in set (0.00 sec)

mysql> select max(value),user_id from payments group by user_id;
+------------+---------+
| max(value) | user_id |
+------------+---------+
|        150 |       1 |
|        340 |       2 |
|         15 |       3 |
|         20 |       4 |
+------------+---------+
4 rows in set (0.00 sec)

mysql> select max(T.value),TT.user_id from payments T inner join (select max(value) as val,user_id from payments group by user_id) TT on T.value!=TT.val and T.user_id=TT.user_id group by T.user_id;;
+--------------+---------+
| max(T.value) | user_id |
+--------------+---------+
|           10 |       1 |
|          100 |       2 |
+--------------+---------+
2 rows in set (0.00 sec)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM