Автоматический пересчёт скидок и итоговой суммы!
Не обязательно считать скидки и финальную стоимость на уровне приложения — SQL может делать это сам.
Добавим вычисляемое поле с финальной суммой:
Теперь при вставке всё считается автоматически:
Также можно обновлять скидки массово:
🔥 SQL сам пересчитает итог — без ручной логики и ошибок округления. Удобно для биллинга, акций и расчёта чеков в реальном времени.
➡️ SQL Ready | #практика
Не обязательно считать скидки и финальную стоимость на уровне приложения — SQL может делать это сам.
Добавим вычисляемое поле с финальной суммой:
ALTER TABLE orders
ADD COLUMN total_with_discount NUMERIC(12,2)
GENERATED ALWAYS AS (
((total * (100 - COALESCE(discount, 0))) / 100)::NUMERIC(12,2)
) STORED;
Теперь при вставке всё считается автоматически:
INSERT INTO orders (total, discount) VALUES (500, 10)
RETURNING total, discount, total_with_discount;
-- total=500.00 | discount=10.00 | total_with_discount=450.00
Также можно обновлять скидки массово:
UPDATE orders
SET discount = CASE
WHEN total > 1000 THEN 15
WHEN total > 500 THEN 10
ELSE 5 END;
🔥 SQL сам пересчитает итог — без ручной логики и ошибок округления. Удобно для биллинга, акций и расчёта чеков в реальном времени.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤7👍3
Координаты пользователя есть, но важно понять, какая станция метро ближе всего - это база для маршрутов, логистики и даже таргетинга рекламы.
В задаче:
• Рассчитаем расстояние между пользователями и станциями по координатам;
• Найдём ближайшую станцию для каждого пользователя;
• Вернём таблицу с названием станции и дистанцией в километрах.
В результате получаем инструмент для анализа доступности точек, который легко применить к складам, пунктам выдачи или курьерским зонам.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18🤝10👍8❤4
This media is not supported in your browser
VIEW IN TELEGRAM
На Hacksplaining есть полноценный урок SQL Injection, где показывают, как злоумышленники внедряют запросы и как от этого защититься.
Курс не просто теоретический - смотришь код, анализируешь, проверяешь варианты атак и способов защиты. Понимаешь, как работают запросы к базе данных и как их можно исказить под чужие цели.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4🤝4❤1
В этой шпаргалке — ключевые конструкции для построения деревьев и цепочек подчинённости в SQL: рекурсивные запросы, самосоединения и фильтрация уровней. Эти приёмы применяются при моделировании категорий, организационных структур и древовидных меню без сторонних средств.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤4👍4
COALESCE — заполняем пропуски в запросе!
Заменим отсутствующие телефоны на понятный текст:
В реальных проектах — незаменимо для расчётов:
При объединении источников можно задать приоритет данных:
Для аналитики — способ исключить искажения при агрегации:
🔥
➡️ SQL Ready | #практика
NULL часто ломают отчёты и расчёты: сумма, среднее, сортировка — всё сбивается. COALESCE() подставляет первое непустое значение и спасает от ошибок.Заменим отсутствующие телефоны на понятный текст:
SELECT name, COALESCE(phone, 'не указано') AS phone
FROM customers;
В реальных проектах — незаменимо для расчётов:
SELECT id, total,
total - (total * COALESCE(discount, 0) / 100) AS total_after_discount
FROM orders;
При объединении источников можно задать приоритет данных:
SELECT user_id,
COALESCE(main.email, backup.email, 'unknown@example.com') AS email
FROM main_users AS main
LEFT JOIN backup_users AS backup USING (user_id);
Для аналитики — способ исключить искажения при агрегации:
SELECT region, SUM(COALESCE(sales, 0)) AS total_sales
FROM branches
GROUP BY region;
🔥
COALESCE делает запросы надёжнее, отчёты точнее, а код — чище и короче.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤8🔥7
SQL умеет сам генерировать даты, числа и интервалы. Можно строить отчёты, искать пропуски и анализировать активность без сторонних таблиц.
В этом посте:
• Генерируем последовательность дат и временных меток;
• Находим “пустые” дни без заказов;
• Формируем ежедневный отчёт по активности.
Функция, которая превращает SQL в крутой аналитический инструмент.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥8❤5🤝3
Скользящее среднее: сглаживаем колебания заказов!
Оконные функции позволяют видеть тренд заказов без резких скачков.Посчитаем среднее количество заказов за последние 3 дня.
Считаем количество заказов по датам:
Формируем временную таблицу для расчётов:
Вычисляем среднее за 3 дня:
Добавляем исходное значение для сравнения:
🔥 Получаем сглаженную динамику заказов по датам — идеальный инструмент для анализа активности.
➡️ SQL Ready | #практика
Оконные функции позволяют видеть тренд заказов без резких скачков.Посчитаем среднее количество заказов за последние 3 дня.
Считаем количество заказов по датам:
SELECT order_date,
COUNT(*) AS orders
FROM orders
GROUP BY order_date;
Формируем временную таблицу для расчётов:
WITH daily AS (
SELECT order_date,
COUNT(*) AS orders
FROM orders
GROUP BY order_date
)
Вычисляем среднее за 3 дня:
SELECT order_date,
AVG(orders) OVER (
ORDER BY order_date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) AS avg_3days
FROM daily;
Добавляем исходное значение для сравнения:
SELECT order_date,
orders,
ROUND(AVG(orders) OVER (
ORDER BY order_date
ROWS 2 PRECEDING
), 2) AS avg_3days
FROM daily;
🔥 Получаем сглаженную динамику заказов по датам — идеальный инструмент для анализа активности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤9🔥7🤝2