Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 46 из 52 · 9 мин
Номер, место и доля — не сворачивая строки в группы.
GROUP BY схлопывает товары в одну строку на категорию. А мне нужен каждый товар и его место.
Оконная функция: считаю по группе строк, но строки не схлопываю. Окно задаёшь в OVER.
OVERфункция() OVER (…) — функция видит «окно» строк, но возвращает значение для каждой строки. Пустые скобки — окно из всех строк.SELECT name, price, round(100 * price / sum(price) OVER (), 1) AS share_pct
FROM products
ORDER BY price DESC
LIMIT 5;PARTITION BYOVER (PARTITION BY category_id) — для каждой строки окно состоит из строк её категории. Почти GROUP BY, но строки остаются.SELECT name, category_id, price, round(avg(price) OVER (PARTITION BY category_id), 2) AS category_avg
FROM products
WHERE category_id IS NOT NULL;row_numberrow_number() OVER (ORDER BY …) — 1, 2, 3… в заданном порядке, без повторов.SELECT customer_id, id AS order_id, row_number() OVER (PARTITION BY customer_id ORDER BY created_at) AS nth
FROM orders
WHERE customer_id IN (1, 2);rank · dense_rankrank() — места с пропусками после равных (1, 1, 3), dense_rank() — без пропусков (1, 1, 2).SELECT name, price, rank() OVER (ORDER BY price DESC) AS rank, dense_rank() OVER (ORDER BY price DESC) AS dense
FROM products
WHERE category_id = 1;Нужен итог по группе, но строки терять нельзя — это оконная функция, а не GROUP BY.
Для товаров с категорией выведи name, category_id, price и place — место по цене внутри категории (самый дорогой — 1) через rank().
categories — категории товаровid, nameproducts — товарыid, name, category_id, price, weight_g, is_available, added_oncustomers — покупателиid, name, email, city, phone, birthday, registered_onstaff — сотрудникиid, name, role, salary, hired_on, manager_idorders — заказыid, customer_id, staff_id, created_at, statusorder_items — позиции заказовorder_id, product_id, quantity, unit_pricereviews — отзывыid, customer_id, product_id, rating, comment, created_onВыберите один ответ.
Чем оконная функция отличается от агрегата с GROUP BY?
Выберите один ответ.
Цены 300, 300, 250. Какие места даст rank() по убыванию?
Проверяем состояние обучения…