Сегодня разбираем SQL-задачу: как найти заказы, сумма которых превышает среднюю по всем заказам.
Ключевые моменты:
• Вычисляем среднюю сумму заказов с помощью SELECT AVG(...).
• Сравниваем каждую строку с этим средним значением в WHERE
• Возвращаем только интересные заказы: order_id, customer_id, total_amount.
Подходит как для новичков, так и для тех, кто хочет отточить работу с подзапросами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥9👍7
WINDOW FUNCTIONS — сравниваем строки без джойнов!
Когда нужно показать, как изменилась цена по сравнению со вчерашним днём — часто пишут
Вместо этого используем оконную функцию
Один проход по таблице, без соединений. План часто использует
Нужен топ-3 товаров по продажам в каждой категории? Используем
🔥 Не забывайте
➡️ SQL Ready | #практика
Когда нужно показать, как изменилась цена по сравнению со вчерашним днём — часто пишут
JOIN
таблицы самой с собой. Но это сложно, медленно и плохо масштабируется при работе с большими таблицами.Вместо этого используем оконную функцию
LAG()
— она возвращает значение из предыдущей строки:SELECT
date,
price AS today,
LAG(price) OVER (
PARTITION BY product_id
ORDER BY date
) AS yesterday
FROM prices
WHERE product_id = 42;
Один проход по таблице, без соединений. План часто использует
Index Only Scan
, особенно при хороших индексах. Это делает запросы заметно быстрее и эффективнее.Нужен топ-3 товаров по продажам в каждой категории? Используем
ROW_NUMBER()
:SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY category
ORDER BY sales DESC
) AS rn
FROM products
) AS ranked
WHERE rn <= 3;
🔥 Не забывайте
ORDER BY
внутри окна — он определяет порядок, по которому сравниваются строки. Без него результаты могут быть непредсказуемыми.Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍6🔥5👎1
❤8👍4👎1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤12👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Интерактивный сайт, где вы учитесь писать SQL-запросы в игровой форме. Всё происходит прямо в браузере: пишете запрос — сразу видите результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤10🔥9
Подходит для задач вроде «последний заказ клиента» или «первая операция по счёту». Работает компактно и быстрее оконных функций, если нужен один результат на группу.
Что важно знать:
• Используется с ORDER BY — сначала поле из DISTINCT ON, затем сортировка внутри групп.
• Без ORDER BY результат непредсказуем — зависит от физического порядка строк.
• Альтернатива ROW_NUMBER() — тот же результат, но без подзапросов и лишнего кода.
DISTINCT ON — мощный инструмент в арсенале PostgreSQL, когда важна лаконичность и производительность.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤7👍6🤝2