WHERE Вид < 2
ORDER BY Основа, Блюдо;
PARTITION BY Основа означает, что блюда с одной основой образуют группу, для которой и выполняется независимая нумерация. В результате получим:
| Результат
| |
| Номер
| Блюдо
| Основа
|
|
| Сметана
| Молоко
|
|
| Творог
| Молоко
|
|
| Мясо с гарниром
| Мясо
|
|
| Салат мясной
| Мясо
|
|
| Салат витаминный
| Овощи
|
|
| Салат летний
| Овощи
|
|
| Паштет из рыбы
| Рыба
|
|
| Салат рыбный
| Рыба
|
Отсутствие конструкции PARTITION BY, как это было в первом примере, означает, что все строки результирующего набора образуют одну единственную группу.
Функции RANK() и DENSE_RANK()
Эти функции, как и функция ROW_NUMBER(), тоже нумеруют строки, но делают это несколько отличным способом. Это отличие проявляется в том, что строки, которые имеют одинаковые значения в столбцах, по которым выполняется упорядочивание, получают одинаковые номера (ранги).
получат такие номера:
Пример 44.
SELECT rank() over(ORDER BY Основа ) as Номер, Блюдо, Основа
FROM Блюда
| Результат
| |
| Номер
| Блюдо
| Основа
|
|
| Сметана
| Молоко
|
|
| Творог
| Молоко
|
|
| Мясо с гарниром
| Мясо
|
|
| Салат мясной
| Мясо
|
|
| Салат витаминный
| Овощи
|
|
| Салат летний
| Овощи
|
|
| Паштет из рыбы
| Рыба
|
|
| Салат рыбный
| Рыба
|
WHERE Вид < 2
ORDER BY Основа, Блюдо;
SELECT dense_rank() over(ORDER BY Основа ) as Номер, Блюдо, Основа