USING — способ объединять таблицы в SQL!
Когда таблицы имеют одинаковые ключи,
Объединим заказы и клиентов по общему полю:
То же самое через
С
Можно соединять и по нескольким ключам:
Пример из аналитики: посчитаем сумму заказов по каждому клиенту:
🔥 Используйте
➡️ SQL Ready | #практика
Когда таблицы имеют одинаковые ключи,
USING помогает сократить код и избежать дублирования столбцов.Объединим заказы и клиентов по общему полю:
SELECT *
FROM orders
JOIN customers USING (customer_id);
То же самое через
ON выглядело бы чуть длиннее и менее лаконично:SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id;
С
USING SQL сам убирает дубликаты полей, оставляя одно customer_id в результирующем наборе.Можно соединять и по нескольким ключам:
SELECT *
FROM orders
JOIN shipments USING (order_id, customer_id);
Пример из аналитики: посчитаем сумму заказов по каждому клиенту:
SELECT customer_id,
c.customer_name,
SUM(o.amount) AS total_amount
FROM customers c
JOIN orders o USING (customer_id)
GROUP BY customer_id, c.customer_name
HAVING SUM(o.amount) > 1000
ORDER BY total_amount DESC;
🔥 Используйте
USING, когда имена ключей совпадают — это приём, который улучшает читаемость и уменьшает вероятность ошибок.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18❤9👍9
Транзакция — не просто “begin и commit”, а ещё и способ управлять атомарностью и блокировками!
Начинаешь с
Если что-то падает, делай
Не забывай: каждая открытая транзакция держит блокировки. Чем дольше она живёт, тем выше шанс конфликтов.
Контролируй уровень изоляции - баланс между скоростью и безопасностью:
🔥 Производительность БД начинается с правильного управления транзакциями и блокировками.
➡️ SQL Ready | #совет
Начинаешь с
BEGIN — всё, что дальше, идёт как единое целое:BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
Если что-то падает, делай
rollback, и база возвращается к исходному состоянию.Не забывай: каждая открытая транзакция держит блокировки. Чем дольше она живёт, тем выше шанс конфликтов.
Контролируй уровень изоляции - баланс между скоростью и безопасностью:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍8🤝6❤3
Сегодня создаём простого бота, который “понимает” текст запроса и отвечает на сообщения пользователя.
В этом посте:
• Храним шаблоны фраз и ответы в таблице responses;
• Используем ILIKE, чтобы находить ключевые слова в сообщении;
• Возвращаем лучший ответ по приоритету совпадений.
Приём показывает, что SQL способен работать не только с числами, но и с текстом, превращаясь в мини-экспертную систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27❤9👍7🤝1
В этой шпаргалке собраны основные приёмы работы с временными данными в SQL Server: создание, заполнение, очистка и удаление временных таблиц, а также использование табличных переменных. Эти методы помогают выполнять промежуточные расчёты, строить отчёты и оптимизировать сложные запросы без изменения основной схемы базы.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍11❤9
WITHIN GROUP — агрегаты с управляемым порядком!
Обычные агрегаты в SQL не гарантируют порядок входных данных, что важно для медиан и упорядоченных списков. Конструкция
Пример: соберём список продуктов по категории в порядке убывания продаж:
В отличие от
Пример вычисления порогового значения 90% по сумме заказов по регионам:
Медиана чека по каждому магазину:
Такой подход может быть проще и эффективнее, чем использование
🔥 Используйте
➡️ SQL Ready | #практика
Обычные агрегаты в SQL не гарантируют порядок входных данных, что важно для медиан и упорядоченных списков. Конструкция
WITHIN GROUP решает это, задавая порядок элементов внутри агрегатной функции.Пример: соберём список продуктов по категории в порядке убывания продаж:
SELECT
category_id,
LISTAGG(product_name, ', ') WITHIN GROUP (ORDER BY total_sales DESC) AS top_products
FROM product_sales
GROUP BY category_id;
В отличие от
ARRAY_AGG(product_name ORDER BY ...), синтаксис WITHIN GROUP используется для ordered-set функций, а не для любых агрегатов.Пример вычисления порогового значения 90% по сумме заказов по регионам:
SELECT
region_id,
PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY total_amount) AS p90_sales
FROM orders
GROUP BY region_id;
PERCENTILE_CONT() и PERCENTILE_DISC() позволяют вычислять медиану или любое процентное значение без оконных функций.Медиана чека по каждому магазину:
SELECT
store_id,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total_amount) AS median_check
FROM orders
GROUP BY store_id;
Такой подход может быть проще и эффективнее, чем использование
NTILE() или RANK() в оконных выражениях.WITHIN GROUP, когда важен порядок в агрегатах.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍8❤7
SQL умеет не только суммировать и фильтровать данные, он способен показывать насколько сильно одно влияет на другое.
В этом посте:
• Находим средние значения метрик;
• Считаем ковариацию и дисперсии;
• Собираем финальную формулу корреляции прямо в запросе.
Это помогает быстро проверять гипотезы, оценивать результаты и находить зависимости.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍14❤8🤝1