Понимание некоторых примеров SQL подзапросов - PullRequest
0 голосов
/ 18 июня 2020

Я самоучился SQL из ресурсов на inte rnet. У меня есть два запроса SQL, которые я хотел бы понять.

  1. Напишите запрос SQL для получения трех максимальных зарплат из таблицы.

SELECT distinct Salary from worker a WHERE 3 >= (SELECT count(distinct Salary) from worker b WHERE a.Salary <= b.Salary) order by a.Salary desc;

Напишите запрос SQL, чтобы получить три минимальные зарплаты из таблицы.

SELECT distinct Salary from worker a WHERE 3 >= (SELECT count(distinct Salary) from worker b WHERE a.Salary >= b.Salary) order by a.Salary desc;

Как видите, эти два значения похожи. Часть, которую я не особо понимаю, это:

(a.Salary >= b.Salary) или (a.Salary <= b.Salary)

Я не понимаю его logi c здесь. Что он здесь делает?

Таблица:

введите описание изображения здесь

1 Ответ

0 голосов
/ 18 июня 2020

В вашем запросе для каждой заданной зарплаты вычисляется, сколько зарплат больше / меньше текущей. Если количество больше 3, то текущий не должен отображаться. Условия (a.Salary >= b.Salary) отвечают за подсчет зарплат больше / меньше текущей.

Но чтобы получить 3 мин. / Макс. Salareis, я бы сделал следующее:

SELECT slary
FROM worker
ORDER BY salary DESC
LIMIT 3;

Для мин:

SELECT slary
FROM worker
ORDER BY salary ASC
LIMIT 3;

Если один рабочий может иметь более одной записи, и вам нужно показать максимальное количество, это будет:

SELECT SUM(slary) total_salary
FROM worker
GROUP BY worker_id
ORDER BY salary DESC
LIMIT 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...