Напишите запрос для отображения последних 3 низких зарплат? - PullRequest
0 голосов
/ 29 ноября 2018
  SELECT DISTINCT salary
    FROM worker a
   WHERE 3 >= (SELECT COUNT (DISTINCT salary)
                 FROM worker b
                WHERE a.salary >= b.salary)
ORDER BY salary DESC

Кто-нибудь может объяснить этот запрос?

Ответы [ 2 ]

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

Если вы хотите отобразить последние 3 низкие зарплаты, вы также можете написать это как

select top 3 * from Worker order by salary asc

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

Вот ваш запрос, красиво отформатированный:

SELECT DISTINCT salary
FROM Worker a
WHERE 3 >= (SELECT COUNT (DISTINCT salary) FROM Worker b WHERE a.salary >= b.salary)
ORDER BY
    salary DESC;

Для каждого работника в вашей таблице подзапрос находит число / число работников, чья зарплата на больше , чемзарплата работника по внешнему запросу.Только работы, для которых есть три или меньше других работников с большей отчетной зарплатой, будут возвращены запросом.

Существует другой способ написания запроса с использованием аналитических функций:

SELECT DISTINCT salary
FROM
(
    SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) dr
    FROM Worker
) t
WHERE dr <= 3;

EDIT:

Самый простой способ написать запрос в Oracle:

select salary
from (select distinct salary
      from worker
      order by salary
     ) s
where rownum <= 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...