Існують різні віконні функції. ROW_NUMBER() OVER
може бути використана для простого обмеження кількості отриманих рядків. Наприклад, для повернення не більше 10 рядків:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY KEY ASC) AS rownumber,
COLUMNS
FROM tablename
) AS foo
WHERE rownumber <= 10
ROW_NUMBER може бути недетермінованим: якщо key не унікальний, кожен раз при виконанні запиту можливе присвоєння різних номерів рядкам, у яких key збігається. Колиkey унікальний, кожен рядок буде завжди отримувати унікальний номер рядка.
Віконна функція RANK()
Функція RANK() OVER
працює майже так само, як ROW_NUMBER, але може повернути більш ніж n рядків при певних умовах. Наприклад, для отримання топ-10 наймолодших людей:
SELECT * FROM (
SELECT
RANK() OVER (ORDER BY age ASC) AS ranking,
person_id,
person_name,
age
FROM person
) AS foo
WHERE ranking <= 10
Даний код може повернути більш ніж 10 рядків. Наприклад, якщо є дві людини з однаковим віком, то він поверне 11 рядків.
Нестандартний синтаксис
Не всі СКБД підтримують вище вказані віконні функції. При цьому більшість мають не стандартний синтаксис для рішення тих самих задач. Нижче представлені варіантипростого обмеження вибірки для різних СКБД:
MySQL SELECT * FROM T
LIMIT 10