TGViewer
SQL Ready | Базы Данных SQL Ready | Базы Данных @sql_ready · 17.5K subscribers
Post #942 2.35K
Топ-N по каждой группе с оконными функциями!

Хотите получить несколько лучших элементов в каждой категории? Это типичная задача аналитики, и решается она с помощью оконных функций.

Создадим таблицу:
CREATE TABLE sales (
id INT,
customer VARCHAR(100),
amount DECIMAL(10,2)
);


Запрос для топ-2 заказов на клиента:
SELECT id, customer, amount
FROM (
SELECT id, customer, amount,
ROW_NUMBER() OVER (
PARTITION BY customer
ORDER BY amount DESC
) AS rnk
FROM sales
) t
WHERE rnk <= 2;


Функция ROW_NUMBER() нумерует строки внутри каждой группы. Если у клиента есть пять заказов, они сортируются по убыванию суммы, и первые два остаются.

Пример для клиента с 5 заказами:
id | customer | amount
-----------------------
12 | Ivanov | 980.00
15 | Ivanov | 750.00
-- остальные (3 строки) отсеялись


🔥 Важно понимать: ROW_NUMBER() всегда уникален. Даже если два заказа на одинаковую сумму, один попадёт в выборку, а другой — нет. Если же нужны все одинаковые значения, лучше использовать RANK() или DENSE_RANK()

➡️ SQL Ready | #практика
  • 🔥 15
  • 👍 9
  • ❤ 7
More from @sql_ready
  1. Oct 14, 2026Почему BETWEEN может незаметно исключать данные при фильтрации по датам! При работе с врем…
  2. Oct 14, 2026🔴В 2025 году Россияне заработали 5,3 млрд рублей на арбитраже криптовалют По данным Минфи…
  3. Oct 14, 2026😎 SQLinfo — русскоязычный справочник по SQL! Сайт с учебными и справочными материалами по…
  4. Oct 13, 2026🖥 Oracle - ограничение количества строк и выборка Top-N! Получение первых N строк с FETCH…
  5. Oct 12, 2026Обновляйте несколько колонок одним подзапросом! Вместо нескольких одинаковых подзапросов:…
  6. Oct 9, 2026❤️ sqlite-postgres-cours — большой практический курс по базам данных! Материал ведёт от пе…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →