7786
Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it
🖥 Пишем мини-чат-бота!
Сегодня создаём простого бота, который “понимает” текст запроса и отвечает на сообщения пользователя.
В этом посте:
• Храним шаблоны фраз и ответы в таблице responses;
• Используем ILIKE, чтобы находить ключевые слова в сообщении;
• Возвращаем лучший ответ по приоритету совпадений.
USING — способ объединять таблицы в SQL!
Когда таблицы имеют одинаковые ключи, 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, когда имена ключей совпадают — это приём, который улучшает читаемость и уменьшает вероятность ошибок.
🖥 Аналитические (оконные) функции Oracle!В этой шпаргалке собраны основные оконные функции Oracle SQL, применяемые для аналитики, ранжирования и работы с порядком строк без свёртки данных. Они вычисляют значения в контексте "окна" — набора строк, связанных с текущей строкой. Это мощный инструмент для аналитических отчётов и сложных выборок.
➡️ SQL Ready | #шпора
🖥 Находим пробки в городе с помощью!
В этой задаче соберём запрос, который определит «пробки» на дорогах: места, где машины движутся слишком медленно.
Что делаем:
• Считаем среднюю скорость по каждому участку дороги за последние 10 минут;
• Отмечаем «пробку», если средняя скорость падает ниже 15 км/ч;
• Определяем топ-участки, где движение затруднено чаще всего.
😎 Code — кладезь знаний по SQL на русском!
Это не просто справочники - это структурированный учебник и тренажёр в одном месте. Ты найдёшь понятные теоретические объяснения и сразу приступишь к практике: каждая тема содержит примеры и задачи, которые можно решать прямо на сайте.
📌 Оставляю ссылочку: code.mu
➡️ SQL Ready | #ресурс
Айтишники зарабатывают ДОХ#Я 💵💵
Не все, конечно, а только самые хваткие.
Кто с холодной головой и чёткой архитектурой внутри.
💼 Рынок сейчас покупает НЕ знания.
Он покупает тех, кто умеет собрать их в работающую модель
Бизнес-архитектор — канал о том, как люди в IT, бизнесе и на фрилансе собирают из своих знаний доход в несколько тысяч $ в месяц.
Подпишись и превращай знания в результат: ⤵️
/channel/+jONJxjgUpWs3N2Vi
/channel/+jONJxjgUpWs3N2Vi
☕️ Чуть не забыл, знали, что каждый 256-й день в году отмечается День программиста?
И как раз сегодня — этот самый день!
Кстати, 256 не с проста:
Это 2 в степени 8, то есть максимальное количество значений, которые может хранить один байт — основа работы компьютеров.
В невисокосный год праздник выпадает на 13 сентября, а в високосный — на 12-е.
«О безопасности подумаем позже» — так рассуждают многие специалисты в погоне за быстрым релизом. Но такая спешка создает слабые места в коде, которые рано или поздно приводят к инцидентам.
18 сентября на техническом вебинаре «Когда разработчику нужно задуматься об ИБ? Observability безопасности» обсудим:
🛡 Ред флаги в работе программистов.
🛡 Обеспечение безопасности на каждом этапе SDLC.
🛡 План действий для непосредственного первого звена в цикле разработки.
Также покажем, как платформа GMonit позволяет выстроить непрерывный процесс мониторинга приложений и находить уязвимости.
⏰ Время встречи: 17:00–18:00 (Мск)
🔗 Регистрация по ссылке!
🖥 Анализируем игровые ставки и выигрыши!
Сегодня разберём мини-задачу по геймификации: соберём отчёт по ставкам и выигрышам игроков. Поймем баланс игры, выявим активных участников и посчитаем прибыль системы.
В этой задаче:
• Считаем общий объём ставок и выигрышей;
• Определяем топ-5 игроков и их «удачливость»;
• Смотрим итоговый доход системы.
📂 Напоминалка по базам данных!
Например, реляционные SQL-базы обеспечивают строгую структуру и транзакционность (ACID), а NoSQL-решения предлагают гибкость, горизонтальное масштабирование и высокую доступность.
На картинке — основные классы баз данных и их подвиды.
Сохрани, чтобы не забыть!
➡️ SQL Ready | #ресурс
🖥 Рассмотрим методы работы с NULLВ этой шпаргалке собраны ключевые приёмы для работы с пропущенными значениями: проверка, замена, защита от ошибок, гибкая логика условий и поиск экстремальных значений. Они применяются при аналитике, подготовке отчётов и построении корректных продакшн-запросов.
➡️ SQL Ready | #шпора
🖥 Поиск пропусков в данных — контроль качества прямо в скл!
Часто нужно не только считать суммы и средние, но и находить дыры в данных: пустые даты, отсутствующие ID, пропавшие заказы. SQL умеет это делать без скриптов и процедур.
В этом посте:
• Построение календаря для поиска дней без событий.
• Проверка целостности ID и нахождение «дыр».
• Анализ длины пустых промежутков во временных рядах.
🖥 SQL-анализ брошенных корзин и упущенной выручки!
Корзина есть, товары добавлены, но заказ так и не оформлен. Это и есть «брошенные» корзины, которые напрямую означают потерянные деньги.
Сегодня в задаче:
• Находим корзины, по которым заказ не был создан в течение 24 часов;
• Считаем их стоимость;
• Получаем статистику по пользователям, какой средний чек и сколько денег «ушло в никуда».
🖥 Функции для работы с массивами!В этой шпаргалке собраны 8 методов для сбора, развертывания, подсчёта и преобразования массивов и строк. Короткие примеры помогут быстро ориентироваться в аналитических запросах и готовить данные для отчётов, API или BI-инструментов.
➡️ SQL Ready | #шпора
🖥 Накопительные итоги — running totals без циклов!
Хотите видеть, как растут продажи день за днём или отслеживать баланс по пользователям? С функциями SQL можно посчитать нарастающий итог прямо в одном запросе.
Сегодня в посте:
• Считаем общий running total по датам.
• Считаем накопительные суммы отдельно для каждого пользователя.
• Контролируем диапазон расчёта с ROWS BETWEEN.
Транзакция — не просто “begin и commit”, а ещё и способ управлять атомарностью и блокировками!
Начинаешь с 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;
❤️ CodeAbbey — тренажёр алгоритмического мышления!
Сайт с огромной коллекцией задач по программированию, от самых простых до тех, что реально заставят подумать.
Учиться можно на абсолютно любом языке. Отличный способ подтянуть логику, научиться писать аккуратный код и подготовиться к собесам.
📌 Оставляю ссылочку: codeabbey.com
➡️ SQL Ready | #ресурс
GENERATE_SERIES — быстро создаём последовательности чисел и дат!
В SQL часто требуется сгенерировать последовательность чисел или дат для отчётов, тестовых данных или анализа временных рядов.
Вместо ручного создания таблиц или массивов можно использовать встроенную функцию GENERATE_SERIES:
SELECT *
FROM generate_series(1, 10) AS number;
SELECT *
FROM generate_series('2025-01-01'::date, '2025-01-07'::date, '1 day') AS day;
SELECT d.day, COALESCE(o.total, 0) AS total_orders
FROM generate_series('2025-01-01'::date, '2025-01-07'::date, '1 day') AS d(day)
LEFT JOIN orders o ON o.order_date = d.day;
Программисты из Telegram создали сильнейшие IT- каналы
🐍 Ghostly Python - автоматизируй всё, что можешь. Боты, скрипты, парсеры, утилиты - делаем Python простым и полезным. Уверенный старт для новичков и не только.
☕️ Easy Java - Java без боли. От основ до фреймворков. Просто, понятно и по делу. Если хочешь реально понять язык - тебе сюда.
😎 IT Syndicate - главный хаб для тех, кто живёт IT. GameDev, InfoSec, Frontend, DevOps, AI и многое другое. Готовь мозг, тут будет жарко.
🧡 Ghostly Frontend - фронтенд без лишнего шума. HTML, CSS, JavaScript, React, Vue — всё, что нужно, чтобы создавать быстрые и красивые интерфейсы.
🖥 Разбираемся с MATCH_RECOGNIZE — поиском паттернов прямо!
Этот инструмент позволяет находить последовательности событий: рост цены и её падение, пропуски активности пользователей.
Что важно знать:
• PATTERN описывает последовательность (например, рост => падение)
• DEFINE задаёт правила для каждого шага;
• Можно строить аналитику для временных рядов, активности, безопасности.
MATCH_RECOGNIZE делает SQL гибким и превращает его в язык сценариев — без циклов и внешних процедур.
Распределяем события по типам — GROUP BY + агрегаты!
Когда нужно понять, какие типы событий встречаются чаще, обычный WHERE не помогает — нужна агрегация.
Посчитаем количество каждого типа события:
SELECT EventType, COUNT(*) AS EventCount
FROM Logs
GROUP BY EventType;
SELECT EventType, COUNT(*) AS EventCount
FROM Logs
GROUP BY EventType
HAVING COUNT(*) > 100;
SELECT EventType,
COUNT(*) AS EventCount,
AVG(ResponseTime) AS AvgResponse
FROM Logs
GROUP BY EventType
HAVING COUNT(*) > 100;
🖥 Псевдоколонки — аналитика «рядом с рядком»
С помощью ROW_NUMBER, RANK, DENSE_RANK, NTILE и PERCENT_RANK можно добавлять к каждой строке информацию о её позиции, ранге или квантиле прямо в запросе.
В этом гайде:
• Присвоение уникальных номеров строкам с ROW_NUMBER();
• Разбор разницы между RANK() и DENSE_RANK() при одинаковых значениях;
• Сегментация с NTILE() и относительное положение с PERCENT_RANK().
☕️ Познавательная статья с Хабра, в которой автор реализует полноценный SQL‑пайплайн когортного анализа!
В этой статье:• Определение исходной точки на примере таблицы заказов
• Шаблон построения когорт и связывание с заказами через CTEs
• Разбор edge-кейсов, построение LTV по когортам и RFM-анализ с сегментацией
🔊 Продолжай чтение на Habr!
☕️ YeaHub — база знаний по всем IT-направлениям!
Здесь собрана огромная база реальных вопросов по бэкенду, DevOps, Data Science и другим направлениям. Всё структурировано по темам и приближено к формату собеседований в компаниях. Это именно тот ресурс, который нужно держать под рукой!
📌 Оставляю ссылочку: yeahub.ru
➡️ SQL Ready | #сайт
⏹️Новая специализация, о которой почти никто не знает: проще вход, ниже конкуренция, выше чеки
В архитектурной сфере катастрофически не хватает разработчиков. Проектировщики и инженеры нуждаются в плагинах для софта, а программистов, которые умеют их писать, — единицы. Конкуренция минимальна, спрос растет, а чеки за проекты выше, чем в классическом аутсорсе.
▶️Освоив Revit API, вы сможете быстро войти в нишу, где каждый навык напрямую конвертируется в деньги.
На курсе «Программирование в Autodesk Revit» от EdTech-платформы STEMPS вы научитесь:
➡️Писать плагины и инструменты на C# для инженеров
➡️Автоматизировать рутинные процессы и проверки моделей
➡️Создавать востребованный софт для архитектурных и проектных бюро
👤Автор курса — Дмитрий Смирнов, CTO DynamicLabs, STEMPS, Atomtech, Plancy. Разрабатывал системы автоматизации и SaaS-системы для компаний на 700+ сотрудников.
🗓 Старт курса — 23 сентября.
📍Студенты получат документ о повышении квалификации.
🔥Успейте записаться на курс со скидкой 10%:
https://stemps.ru/
Индексы: когда они вредят вместо помощи!
Разбираем типичные ошибки при работе с индексами. Неправильное использование может замедлить базу данных вместо ускорения.
Каждый индекс замедляет INSERT/UPDATE операции:
CREATE INDEX idx_user_name ON users(name);
CREATE INDEX idx_user_email ON users(email);
CREATE INDEX idx_user_phone ON users(phone);
CREATE INDEX idx_user_city ON users(city);
SELECT * FROM orders WHERE YEAR(order_date) = 2024;
-- Индекс на order_date не используется
SELECT * FROM orders WHERE order_date >= '2024-01-01' AND order_date < '2025-01-01';
CREATE INDEX idx_user_city_age ON users(city, age);
city или city+age, но бесполезен для поиска только по age.EXPLAIN для проверки, что индексы действительно работают!
❤️ Codedex — учи SQL через приключение!
Здесь ты научишься создавать таблицы, фильтровать данные, использовать операторы и агрегатные функции — всё через увлекательные практические задания.
📌 Оставляю ссылочку: codedex.io
➡️ SQL Ready | #ресурс
👋🏼 Приветствую!
Ровно год назад я создал этот канал и не только (не важно что 12 июля, главное первый пост был 8 сентября 😁).
Спасибо всем кто подписан на мой склчик, особенно благодарю тех, кто ставит реакции.
🖥 За это время контент намного стал лучше, с таких постов, до таких как сейчас.
Но кстати всё равно, раньше тоже круто было, можете перейти в закреп и там посмотреть на старые постики.
В общем, поздравляю сам себя с годовщиной! 🥳
🖥 Транзакции и блокировка строк!
При конкурентных изменениях данных важно исключить конфликты. Используем транзакции, блокировки строк и правильный уровень изоляции.
Создадим таблицу счетов:
CREATE TABLE Accounts (
id INT PRIMARY KEY,
name VARCHAR(50),
balance DECIMAL(10,2)
);
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- защита от грязных чтений
BEGIN;
SELECT balance FROM Accounts
WHERE id = 1 FOR UPDATE; -- эксклюзивная блокировка строки
UPDATE Accounts SET balance = balance - 500 WHERE id = 1;
UPDATE Accounts SET balance = balance + 500 WHERE id = 2;
COMMIT; -- сохраняем изменения
ROLLBACK; -- можно вызвать до COMMIT при ошибке
FOR UPDATE ставит row-level exclusive lock: другие транзакции ждут, пока вы завершите свою.
Проверяем дубликаты и считаем уникальные значения!
В больших таблицах важно быстро находить повторяющиеся записи и понимать, сколько уникальных элементов. Это полезно для контроля качества данных и аналитики.
Создадим таблицу пользователей:
CREATE TABLE users (
user_id INT,
email VARCHAR(100)
);
INSERT INTO users VALUES
(1, 'alice@mail.com'),
(2, 'bob@mail.com'),
(3, 'alice@mail.com'),
(4, 'carol@mail.com'),
(5, 'bob@mail.com');
SELECT email, COUNT(*) AS cnt,
CASE WHEN COUNT(*)>1 THEN 'Duplicate' ELSE 'Unique' END AS status
FROM users
GROUP BY email;
COUNT() + GROUP BY группирует одинаковые значения, а CASE сразу классифицирует их как дубликаты или уникальные.email | cnt | status
-----------------------------
alice@mail.com | 2 | Duplicate
bob@mail.com | 2 | Duplicate
carol@mail.com | 1 | Unique