Получить всю зарплату сотрудника из таблиц сотрудников с 3-й по величине зарплаты в MYSQL

0

Напишите ниже запрос:

mysql > select * from employees where Salary NOT IN (select Salary from employees limit 3);

Дает ошибку ниже:

ERROR 1235 (42000): эта версия MySQL еще не поддерживает "LIMIT & IN/ALL/ANY/SOME subquery"

Теги:

2 ответа

0

В вашем запросе есть 2 проблемы. Сначала это синтаксис, а второй - отсутствие ORDER BY в LIMIT SELECT. Если нет ORDER, результат может каждый раз изменяться (Ramdom)

Вы можете сделать это с помощью QUERY следующим образом:

SELECT e.* FROM employees e WHERE e.salery NOT IN 
(SELECT * FROM (
    SELECT s.salery
    FROM employees s
    ORDER BY salery LIMIT 3) AS tmp)
ORDER BY e.salery ;

Вот мой пример:

MariaDB [bernd]> select * FROM employees;
+----+--------+--------+
| id | salery | name   |
+----+--------+--------+
|  1 |    100 | Bernd  |
|  2 |    500 | Peter  |
|  3 |    300 | Paul   |
|  4 |   1234 | Mary   |
|  5 |    800 | Erwin  |
|  6 |    777 | Hubert |
+----+--------+--------+
6 rows in set (0.00 sec)

MariaDB [bernd]>

MariaDB [bernd]> SELECT e.* FROM employees e WHERE e.salery NOT IN
    -> (SELECT * FROM (
    ->     SELECT s.salery
    ->     FROM employees s
    ->     ORDER BY salery LIMIT 3) AS tmp)
    -> ORDER BY e.salery ;
+----+--------+--------+
| id | salery | name   |
+----+--------+--------+
|  6 |    777 | Hubert |
|  5 |    800 | Erwin  |
|  4 |   1234 | Mary   |
+----+--------+--------+
3 rows in set (0.00 sec)
0

Что-то вроде:

select employees.*
from employees
where (
   select count(*) from employees as e
   where e.Salary >= employees.Salary
) > 3;

... но в зависимости от размера таблицы/индексов она может быть слишком тяжелой для сервера. SQL Fiddle: http://sqlfiddle.com/#!9/67754e/2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню