2016-07-02 21 views

答えて

0

内側のクエリは彼らの最高の給料を従業員に返却してから出てから、それらを照会しますhelps-ホープ最高給与は になるので、二番目に高い給与を得ます。

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) 
0

私は非常に迅速な解決策は、このようなことができると思い:

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

はそれが

+0

OPは "各従業員"と言っていますが、これは1つの行だけを返します。私はまだ彼のデータベース設計が意味をなさないと思う。 –

+0

@Matti Virkkunenあなたは正しいです、実際にはテーブルは正規化されるべきですが、ここではそうではありません... –

+0

これは彼が各従業員のためにそれを手に入れたい –

関連する問題