Кто-нибудь может объяснить, как работает этот запрос? - PullRequest
0 голосов
/ 31 октября 2018

Это запрос SQL, чтобы найти N-ую самую высокую зарплату сотрудников:

SELECT *
FROM emp t
WHERE 1 = (SELECT COUNT(DISTINCT sal)
           FROM emp t2
           WHERE t2.sal > t.sal)

Я не знаю, как он возвращает результат. Если вы поставите 1 в предложении WHERE, он вернется на второе место, а на 2 - на 3-е место и так далее.

Пожалуйста, объясните запрос, так как я не уверен.

1 Ответ

0 голосов
/ 31 октября 2018

Позвольте мне начать с того, что лучше написать запрос:

select e.*
from (select e.*, dense_rank() over (order by sal desc) as seqnum
      from emp e
     ) e
where seqnum = 2;

Что делает ваш запрос? Перейти шаг за шагом:

  • Внешний запрос выполняет сравнение для каждой строки в emp.
  • Сравнение подсчитывает количество зарплат, отличных от зарплаты в ряду.
  • Строка сохраняется, если есть ровно одна зарплата, которая больше.

Другими словами, это сохраняет все строки, которые имеют вторую по величине зарплату. dense_rank() - гораздо более разумный способ написания запроса (и он также имеет лучшую производительность).

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