|
Программирование >> Преобразование значений null
Общее число возвращенных строк может быть больше пяти, но разных заработных плат будет только пять. Используйте ROW NUMBER OVER, если хотите получить пять строк независимо от связей (поскольку эта функция не учитывает связи). MySQL и PostgreSQL Ранжирование заработных плат выполните с помощью скалярного подзапроса. Затем ограничьте результаты этого подзапроса соответственно рангу возвращенных строк:
Обсуждение DB2, Oracle и SQL Server Все делает ранжирующая функция DENSE RANK OVER во вложенном запросе X. Следующий пример показывает всю таблицу после применения этой функции: select ename, sal, dense rank() over (order by sal desc) dr from emp
Теперь осталось только выбрать строки, для которых DR меньше или равно пяти.
Заключительный шаг - выбрать только те строки, в которых значение RNK меньше или равно пяти. Как найти записи с наибольшим и наименьшим значениями Задача Требуется найти крайние значения (экстремумы) таблицы. Например, стоит задача выбрать из таблицы EMP служащих с наибольшей и наименьшей заработными платами. Решение DB2, Oracle и SQL Server Для поиска наименьшей и наибольшей заработных плат используйте оконные функции MIN OVER и MAX OVER соответственно: 1 select ename 2 from ( 3 select ename, sal, 4 min(sal)over() min sal, 5 max(sal)over() max sal MySQL и PostgreSQL Скалярный подзапрос во вложенном запросе X ранжирует заработные платы следующим образом: select (select count(distinct b.sal) from emp b where a.sal <= b.sal) as rnk, a.sal, a.ename
Имея это результирующее множество, осталось лишь выбрать строки, в которых значение SAL равно MIN SAL или MAX SAL. MySQL и PostgreSQL В этом решении для поиска наименьшей и наибольшей заработных плат используются два подзапроса в одном списке оператора IN. Внешний запрос возвращает строки, в которых значения заработных плат соответствуют значениям, возвращенным хотя бы одним из подзапросов. 6 from emp 7 ) x 8 where sal in (min sal,max sal) MySQL и PostgreSQL Напишите два подзапроса: один для возвращения MIN значения SAL, другой - MAX значения SAL: 1 select ename 2 from emp 3 where sal in ( (select min(sal) from emp), 4 (select max(sal) from emp) ) Обсуждение DB2, Oracle и SQL Server Оконные функции MIN OVER и MAX OVER обеспечивают возможность доступа к наименьшей и наибольшей заработным платам в каждой строке. Результирующее множество вложенного запроса Х следующее: select ename, sal, min(sal)over() min sal, max(sal)over() max sal from emp
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |