Найти второй по величине запрос не работает - PullRequest
0 голосов
/ 09 ноября 2018

Я не мог понять, почему мой запрос не работает. Ошибки показывают, что агрегатная функция должна использовать group by. Я добавляю "группу по MAX (зарплата)", которая не может сделать свое дело. Пожалуйста, помогите, спасибо!

Таблица:

enter image description here

Запрос

SELECT Name, MAX(Salary)
FROM  PRACTICE.SALARY
WHERE Salary 
NOT IN (SELECT MAX(Salary) FROM  PRACTICE.SALARY);

1 Ответ

0 голосов
/ 09 ноября 2018

Когда вы используете статистическую функцию, вам нужно добавить неагрегированные столбцы в group by

SELECT Name, MAX(Salary)
FROM  PRACTICE.SALARY
WHERE Salary 
NOT IN (SELECT MAX(Salary) FROM  PRACTICE.SALARY)
GROUP BY Name

но Если вы хотите получить только второе высшее значение SALARY, ваш запрос будет иметь неправильный результат, потому что вы group by для каждого NAME и получите MAX(Salary) вместо каждого NAME будет получать каждую зарплату макс. всей таблицы.

Я думаю, что вы можете использовать этот запрос, чтобы получить ожидаемый результат.

Схема (MySQL v5.7)

CREATE TABLE T(
  Name VARCHAR(50),
  Salary int
);

INSERT INTO T VALUES ('Lucy',2008);
INSERT INTO T VALUES ('PETER',3000);
INSERT INTO T VALUES ('K',1900);
INSERT INTO T VALUES ('TOM',2015);
INSERT INTO T VALUES ('MARK',3001);

Запрос № 1

SELECT Name, Salary
FROM  PRACTICE.SALARY
WHERE Salary <> (SELECT MAX(Salary) FROM PRACTICE.SALARY)
ORDER BY Salary DESC 
LIMIT 1;

| Name  | Salary |
| ----- | ------ |
| PETER | 3000   |

Просмотр на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...