ru
Feedback
SQL Academy: всё о реляционных БД и SQL

SQL Academy: всё о реляционных БД и SQL

Открыть в Telegram

По всем вопросам и коммерческим предложениям писать @LadanovNick Купить рекламу: https://telega.in/c/sqlacademyofficial Чат студентов SQL Academy https://t.me/sqlacademyorg

Больше

📈 Аналитический обзор Telegram-канала SQL Academy: всё о реляционных БД и SQL

Канал SQL Academy: всё о реляционных БД и SQL (@sqlacademyofficial) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 11 386 подписчиков, занимая 10 884 место в категории Технологии и приложения и 57 210 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 11 386 подписчиков.

Согласно последним данным от 07 июля, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило 136, а за последние 24 часа — 8, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 15.32%. В первые 24 часа после публикации контент обычно набирает 10.66% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 1 744 просмотров. В течение первых суток публикация набирает 1 213 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 29.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как sql, строка, индекс, auto_increment, created_at.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
По всем вопросам и коммерческим предложениям писать @LadanovNick Купить рекламу: https://telega.in/c/sqlacademyofficial Чат студентов SQL Academy https://t.me/sqlacademyorg

Благодаря высокой частоте обновлений (последние данные получены 08 июля, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

11 386
Подписчики
+824 часа
+197 дней
+13630 день
Архив постов
DATE_ADD / DATE_SUB — прибавляем дни, месяцы, годы 📅 ❗ Зачем знать Практически каждый отчёт или запрос «за последние N дней»
DATE_ADD / DATE_SUB — прибавляем дни, месяцы, годы 📅 ❗ Зачем знать Практически каждый отчёт или запрос «за последние N дней» использует именно эти функции. Умение правильно прибавлять/вычитать интервалы избавит от ошибок с високосными годами и разной длиной месяцев. 1️⃣ Синтаксис

DATE_ADD(date, INTERVAL N unit)
DATE_SUB(date, INTERVAL N unit)
unit бывает: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR и их комбинации (например, DAY_MICROSECOND). 2️⃣ Простые примеры

-- дата через 7 дней
SELECT DATE_ADD('2025-05-01', INTERVAL 7 DAY);      -- 2025-05-08

-- месяц назад
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

-- +2 часа к текущему времени
SELECT DATE_ADD(NOW(), INTERVAL 2 HOUR);
3️⃣ Кейс: отчёт «за последние 30 дней»

SELECT *
FROM sales
WHERE  sale_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY);
👉 CURDATE() = 00:00:00 текущего дня, поэтому попадут 30 «полных» дней. 4️⃣ Прибавляем месяцы правильно DATE_ADD учитывает разную длину месяцев и високосные годы:

-- 31 января + 1 месяц → 28 февраля (или 29 в високосный год)
SELECT DATE_ADD('2024-01-31', INTERVAL 1 MONTH);   -- 2024-02-29
⚠️ Подводные камни 1. Точность NOW(): если нужен только день без времени — используйте CURDATE(). 2. Интервалы с недельной гранулярностью: INTERVAL 1 WEEK = 7 дней, не календарная неделя.

🔥 БЕСПЛАТНЫЙ КУРС ПО СОЗДАНИЮ НЕЙРО-СОТРУДНИКОВ НА GPT И ДРУГИХ LLM 🔥 Ищете практический и углубленный курс, чтобы освоить
🔥 БЕСПЛАТНЫЙ КУРС ПО СОЗДАНИЮ НЕЙРО-СОТРУДНИКОВ НА GPT И ДРУГИХ LLM 🔥 Ищете практический и углубленный курс, чтобы освоить создание нейро-сотрудников? Мы создали курс из 5 объемных занятий. Это именно то, что нужно, чтобы прокачать свои навыки абсолютно бесплатно! 📌 Темы занятий: 1. Введение в мир нейро-сотрудников 2. Как работают LLM и их аналоги 3. Создание базы знаний для нейро-сотрудника (RAG) 4. Тестирование и отладка нейро-сотрудников 5. Интеграция нейро-сотрудников в Production Вот 5 тем курса - он максимально простой и доступный, общеобразовательный, без какого-либо сложного программирования 📚Прохождение этого курса, скорее всего, займет у вас от 1 до 3 часов 🤖 Присоединяйтесь к нашему бесплатному курсу и разберитесь в этой увлекательной теме с нами!

Не уверены, что у вас на сервере Postgres установлен правильный набор расширений? Удивляетесь, что сервер ваших коллег умеет
Не уверены, что у вас на сервере Postgres установлен правильный набор расширений? Удивляетесь, что сервер ваших коллег умеет больше, чем ваш? Присоединяйтесь к нашему вебинару «Особенности реализации запросов в PostgreSQL» и узнайте, как сделать все правильно! ✅ Практика: Создание собственных решений на основании самых полезных расширений Postgres, которые ставятся на большинство производственных серверов 📌Регистрируйтесь на урок, чтобы сделать ваш сервер Postgres лучше! https://tglink.io/bd429d90b915?erid=2W5zFHRTEMN #реклама О рекламодателе

🔥 Научитесь работать с базами данных и анализировать данные на новом уровне! Курс «SQL для разработчиков и аналитиков» подхо
🔥 Научитесь работать с базами данных и анализировать данные на новом уровне! Курс «SQL для разработчиков и аналитиков» подходит как для новичков, так и для опытных специалистов.  ✅ Вы изучите основы реляционных БД, научитесь создавать сложные SQL-запросы, работать с различными СУБД (PostgreSQL, MySQL, SQL Server) и оптимизировать запросы для повышения производительности. ✅ Вы освоите как базовый, так и продвинутый синтаксис SQL. Применяйте эти навыки для решения реальных задач. ⏰ Набор скоро закроется, не упустите шанс прокачать свои навыки и открыть новые перспективы для карьерного роста. Пройдите тест и получите скидку на обучение: https://otus.pw/xIdC/?erid=2W5zFHLh8CQ Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🚨 Не пропустите 02 июля в 20:00 бесплатный вебинар “SQL: Оконные функции — когда GROUP BY уже не хватает” от курса “SQL для
🚨 Не пропустите 02 июля в 20:00 бесплатный вебинар “SQL: Оконные функции — когда GROUP BY уже не хватает” от курса “SQL для аналитиков и разработчиков”.  На вебинаре обсудим: ✅ Что такое оконные функции и чем они отличаются от агрегатных. ✅ Как с их помощью выполнять расчёты без группировки. ✅ Практические примеры: ранжирование, сравнение с предыдущей строкой, накопительные суммы и т.д. ✅ Что такое PARTITION BY и ORDER BY в контексте окон. ✅ Как оконные функции помогают упростить сложные подзапросы и JOIN-ы. После вебинара вы сможете: - Уверенно использовать оконные функции в повседневной работе. - Упрощать логику отчётов и аналитических расчётов. - Заменять сложные конструкции простыми и эффективными оконными выражениями. - Разрабатывать запросы, в которых используются ROW_NUMBER(), LAG(), LEAD(), SUM() OVER() и др. ⏰ Оставляйте заявку на бесплатный урок и получите запись прошлого вебинара: https://otus.pw/Vjkq/?erid=2W5zFGZ1JFJ Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

💥 67% всех утечек данных — из-за SQL-инъекций. Если вы пентестер (или хотите им стать), вы обязаны уметь находить SQL-уязвим
💥 67% всех утечек данных — из-за SQL-инъекций. Если вы пентестер (или хотите им стать), вы обязаны уметь находить SQL-уязвимости. Это прямой путь к базе данных, админке, а иногда — к полному контролю над системой. Где этому научиться? На практическом курсе по SQL-инъекциям от Академии Кодебай! Запись на поток до 3 июля, а сейчас действует скидка 10% по промокоду SQL10! ✔️ https://tglink.io/5da1a7e086b5 На курсе вы научитесь: ✦ понимать структуру SQL и писать запросы с нуля ✦ внедрять SQL-код в уязвимые формы, параметры, cookies ✦ раскручивать SQLi вручную и через Burp/SQLmap ✦ закрывать такие уязвимости на бэке Аналогов по объёму практики в СНГ и EN-сегменте просто нет. ✔️ Регистрируйтесь, пока действует скидка: https://tglink.io/5da1a7e086b5?erid=2W5zFHjTWKi 🚀 По всем вопросам пишите @Codeby_Academy

SUBSTRING() / LEFT() / RIGHT() — извлекаем части строки ✂️ ❗ Зачем нужно Чистка и разбор данных — частая задача аналитика. Из
SUBSTRING() / LEFT() / RIGHT() — извлекаем части строки ✂️ ❗ Зачем нужно Чистка и разбор данных — частая задача аналитика. Извлечь код страны из телефона, отделить год из даты в тексте, взять первые 3 буквы артикулы — всё это делается прямо в SQL, без кода на стороне приложения. 1️⃣ SUBSTRING() — получить подстроку

-- с 3-й позиции длиной 4 символа
SELECT SUBSTRING('ABCDEF', 3, 4);   
-- результат: 'CDEF'

-- начиная с 2-го символа до конца
SELECT SUBSTRING('123456', 2);      
-- результат: '23456'

-- отрицательный индекс = отсчёт от конца
SELECT SUBSTRING('hello', -2);      
-- результат: 'lo’
2️⃣ LEFT(str, N) — «первые N символов»

SELECT LEFT('8901234567', 2);   
-- '89'  (код страны)
3️⃣ RIGHT(str, N) — «последние N символов»

SELECT RIGHT('2025-04-30', 2);  
-- '30' (день)
💡 Практический пример: разбираем телефон

SELECT
    phone,
    LEFT(phone, 2) AS country_code,   
    -- первые 2 цифры
    SUBSTRING(phone, 3, 3) AS city_code,
    -- далее 3 цифры
    RIGHT(phone, 4) AS last_digits 
    -- последние 4
FROM contacts;
⚠️ Подводные камни 🔹 Нумерация с 1: первый символ — позиция 1, а не 0. 🔹 NULL → NULL: любое из функций вернёт NULL, если аргумент NULL — учитывайте в отчётах. ✅ Итог 🔹SUBSTRING — универсальный нож: позиция + длина. 🔹LEFT / RIGHT — быстрый способ взять начало или конец строки.

Встретились как-то разработчики, аналитики, инженеры данных и DevOps-инженеры… ⚡️Что может их объединять? Главная цель — поня
Встретились как-то разработчики, аналитики, инженеры данных и DevOps-инженеры…  ⚡️Что может их объединять? Главная цель — понять концепцию и архитектуру взаимодействия с Kafka. И нет, это не шутка, это всё курс «Apache Kafka для разработчиков и аналитиков».  ⚡️Уже 30 июня старт углублённого курса на платформе Docker+Postgres. На курсе вы вы изучите архитектуру и поймете логику работы с Kafka на примере бизнес-кейсов, среди которых:  🌐 Финтех  🌐 Репликация таблиц из MySQL в Oracle 🌐Сайт оператора связи с возможностью онлайн-продаж услуг Интернет и ТВ 🌐 Защита от DDoS при обработке API  Занимайте место на курсе прямо сейчас ❗️на 15 000₽ дешевле обычной стоимости, чтобы точно не пропустить старт и стать ещё конкурентоспособнее на рынке IT.  👉🏻Смотреть программу курса

🤸🏻Вкатились в работу с данными и Data-инжиниринг. А что дальше? - Управление знаниями: персональная Data-инженерная вики. -
🤸🏻Вкатились в работу с данными и Data-инжиниринг. А что дальше? - Управление знаниями: персональная Data-инженерная вики. - Где и как рисовать диаграммы и схемы? - Чат-боты и ChatOps: персональный помощник Data-инженера. - Какие софт скиллы нужны Data-инженеру? - Нужны ли Data-инженеру пет-проекты и участие в хакатонах? - Как влиться в DE-комьюнити? 🌝Отвечаем на эти вопросы в видеоуроке от Data Platform Lead и Data-разработчика. Смотрите урок, чтобы упорядочить знания в голове и в данных проекта👉🏻 видеоурок

📕 Работа со смарт-процессами в Битрикс24 для администраторов и специалистов Битрикс24, менеджеров и владельцев бизнеса На от
📕 Работа со смарт-процессами в Битрикс24 для администраторов и специалистов Битрикс24, менеджеров и владельцев бизнеса На открытом уроке 19 июня в 19:00 мск мы погрузимся в тонкости создания и настройки смарт-процессов в Битрикс24.   📗 На вебинаре разберём: 1. Как создавать, настраивать и связывать смарт-процессы с другими элементами системы; 2. Для каких сценариев распространено использование смарт-процессов; 📘 В результате на практике разреберетесь работе со смарт-процессами и в сценариях использования смарт-процессов (например, как выделить отдельный процесс для учёта доставки или согласование документов к сделке). 👉 Регистрация и подробности о курсе Интегратор Битрикс24: https://otus.pw/rccW/?erid=2W5zFH3H6p8 Все участники открытого урока получат скидку на курс "Интегратор Битрикс24", Чек-лист «10 процессов, которые нужно автоматизировать в первую очередь» и Шаблоны роботов для Битрикс24 Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

SEQUENCE (MySQL 8.0.29+) — современная альтернатива AUTO_INCREMENT 💡 Зачем знать 🔹 На собеседованиях всё чаще спрашивают: «
SEQUENCE (MySQL 8.0.29+) — современная альтернатива AUTO_INCREMENT 💡 Зачем знать 🔹 На собеседованиях всё чаще спрашивают: «Чем SEQUENCE отличается от AUTO_INCREMENT и зачем он нужен?» 🔹 В проде помогает, когда один источник чисел требуется сразу нескольким таблицам или когда нельзя допускать длинной блокировки PRIMARY KEY. 1️⃣ Что такое SEQUENCE? Это отдельный объект в схеме, хранящий текущее значение счётчика. 🔹 Не привязан к конкретной таблице. 🔹 Умеет шаг ( INCREMENT ), начальное значение (START). 🔹 Получить число можно в любом запросе: NEXT VALUE FOR seq_name.

-- создаём последовательность с шага 1, стартуем с 10 000
CREATE SEQUENCE ticket_seq
    START WITH 10000
    INCREMENT BY 1;
2️⃣ Вставка чисел в таблицу

INSERT INTO tickets (id, user_id, created_at)
VALUES (NEXT VALUE FOR ticket_seq, 42, NOW());
Получаем уникальный id без AUTO_INCREMENT в самой таблице. 3️⃣ Один счётчик — много таблиц Нужно, чтобы tickets и invoices шли в общей нумерации? Просто используйте ту же последовательность:

INSERT INTO invoices (id, total)
VALUES (NEXT VALUE FOR ticket_seq, 199.00);
4️⃣ Дополнительные возможности

-- увеличить шаг
ALTER SEQUENCE ticket_seq
  INCREMENT BY 10;

-- обнулить (осторожно!)
ALTER SEQUENCE ticket_seq
  RESTART WITH 50000;

-- посмотреть текущее значение
SELECT LAST_VALUE
FROM   INFORMATION_SCHEMA.SEQUENCES
WHERE  SEQUENCE_NAME = 'ticket_seq';
5️⃣ Сравнение с AUTO_INCREMENT 🤔 🔹 Объект: – SEQUENCE — отдельный объект в схеме – AUTO_INCREMENT — жёстко привязан к таблице 🔹Один счётчик для нескольких таблиц: – SEQUENCE — да, можно использовать в любой таблице – AUTO_INCREMENT — нет, только внутри своей таблицы 🔹Задать старт / шаг: – SEQUENCE — гибко: START WITH, INCREMENT BY для каждой последовательности – AUTO_INCREMENT — глобальные AI_OFFSET / AI_INCREMENT, меньше контроля 🔹Сброс счётчика: – SEQUENCE — ALTER SEQUENCE … RESTART WITH n – AUTO_INCREMENT — ALTER TABLE … AUTO_INCREMENT = n (только вверх от MAX(id)) ✅ Итог SEQUENCE = гибкий, «шарящийся» счётчик, который: 🔹Позволяет одной командой нумеровать разные таблицы. 🔹Даёт точный контроль над шагом и стартом.

🚨 Не пропустите 19 июня в 20:00 бесплатный вебинар “SQL: Расширяем понимание индексов в PostgreSQL и MS SQL Server” от курса
🚨 Не пропустите 19 июня в 20:00 бесплатный вебинар “SQL: Расширяем понимание индексов в PostgreSQL и MS SQL Server” от курса “SQL для аналитиков и разработчиков”. На вебинаре обсудим: ✅ Какие ещё типы индексов существуют помимо классического B-Tree. ✅ Как разные СУБД реализуют поддержку дополнительных индексов. ✅ Где могут быть полезны GIN, GiST, BRIN, Columnstore и другие варианты. ✅ Как подходить к выбору типа индекса под конкретную задачу. В результате вебинара вы сможете: —  Лучше ориентироваться в возможностях индексирования в PostgreSQL и MS SQL Server. —  Понимать, какой тип индекса подходит для разных типов данных и запросов. —  Использовать дополнительные индексы там, где это действительно имеет смысл. —  Повысить эффективность работы с БД за счёт грамотного выбора индексации. ⏰ Оставляйте заявку на бесплатный урок и получите запись прошлого вебинара: https://tglink.io/4cf0835189bb?erid=2W5zFJvk5bN Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

📕 Автоматизация процессов в Битрикс24 без кода для администраторов и специалистов Битрикс24, менеджеров и владельцев бизнеса
📕 Автоматизация процессов в Битрикс24 без кода для администраторов и специалистов Битрикс24, менеджеров и владельцев бизнеса На открытом уроке 9 июня в 19:00 мск мы погрузимся в тонкости работы с готовыми инструментами автоматизации Битрикс24.  📗 На вебинаре разберём: 1. 3 рабочих способа автоматизации без кода; 2. Готовые сценарии для продаж, маркетинга, CRM, и не только; 📘 В результате на практике разреберетесь в готовых инструментах и пошаговых алгоритмах автоматизации Битрикс24 без кода и изучите кейсы из реального бизнеса (например, "Как автоматизация сэкономила 200+ часов"). 👉 Регистрация и подробности о курсе Интегратор Битрикс24: https://otus.pw/27jf/?erid=2W5zFJeStJc  Все участники открытого урока получат скидку на курс "Интегратор Битрикс24", Чек-лист «10 процессов, которые нужно автоматизировать в первую очередь» и Шаблоны роботов для Битрикс24 Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

WINDOW-функция NTILE(): делим пользователей на квартели 📊 На собеседованиях любят задачу «раскидай пользователей по квартиля
WINDOW-функция NTILE(): делим пользователей на квартели 📊 На собеседованиях любят задачу «раскидай пользователей по квартилям по количеству покупок». NTILE() решает её одной строкой, без подзапросов и циклов в приложении. 1️⃣ Что такое NTILE() Оконная функция, которая разбивает отсортированный набор строк на N равных «коробок» (tiles).

NTILE(N) OVER (PARTITION BY … ORDER BY …)
🔹 N — число групп (4 = квартели). 🔹 PARTITION BY (необязательно) — создаёт независимые группы (например, по стране). 🔹 ORDER BY — признак, по которому сортируем и считаем ранг. 2️⃣ Классический пример: 4 квартиля по количеству заказов

SELECT
    user_id,
    orders_count,
    NTILE(4) OVER 
      (ORDER BY orders_count DESC) AS quartile
FROM user_stats
ORDER BY orders_count DESC;
🔹 Пользователи с наибольшим orders_count попадают в quartile = 1, а с наименьшим — в quartile = 4. 🔹 Если строк не делится поровну, верхние группы получат на 1 запись больше (MySQL делит «сверху»). 3️⃣ Квартели внутри каждой страны

SELECT
    country,
    user_id,
    orders_count,
    NTILE(4) OVER (
        PARTITION BY country
        ORDER BY orders_count DESC
    ) AS quartile
FROM user_stats;
Теперь каждый блок «страна» делится на свои 4 части — удобно для локальных лидеров. 4️⃣ Как использовать результат 🔹Маркетинг: таргетировать акции только quartile = 4 (самые неактивные). 🔹Аналитика: сравнить средний чек между квартилями. 🔍 Потренируйтесь Откройте готовый плейграунд, запустите NTILE(4) и поэкспериментируйте с разным числом групп. 👉 https://sqlplayground.app/sandbox/683ef210cb9fcbe8d3db3a9eИтог 🔹NTILE(N) быстро делит данные на равные сегменты. 🔹Работает вместе с PARTITION BY и любой сортировкой. 🔹Незаменим при сегментации пользователей, товаров или чеков.

📕 Сравнение индексации в PostgreSQL и ClickHouse для разработчиков, администраторов баз данных, инженеров и аналитиков данны
📕 Сравнение индексации в PostgreSQL и ClickHouse для разработчиков, администраторов баз данных, инженеров и аналитиков данных На открытом уроке 3 июня в 20:00 мск мы обсудим различия в механизмах индексации между PostgreSQL и ClickHouse.  📗 На вебинаре разберём: 1. Основы и сравнение производительности разных подходов к индексации; 2. Для каких сценариев распространено использование этих подходов; 📘 В результате на практике разберете и сравните подходы, производительность и архитектуру индексации PostgreSQL и ClickHouse. 👉 Регистрация и подробности о курсе ClickHouse для инженеров и архитекторов БД: https://tglink.io/391a735e96ea?erid=2W5zFFzAoHr Все участники открытого урока получат скидку на курс "ClickHouse для инженеров и архитекторов БД" Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🤫 Хотите узнать как сделать связку разработчик+аналитик SQL еще эффективнее? 🔥 Открыт набор на онлайн-курс “SQL для аналити
🤫 Хотите узнать как сделать связку разработчик+аналитик SQL еще эффективнее? 🔥 Открыт набор на онлайн-курс “SQL для аналитиков и разработчиков”, где мы научим вас продвинутым аспектам работы с реляционными базами данных, улучшить навыки работы с SQL-запросами, понять принципы нормализации баз данных.  Что будет на курсе? Основы реляционных баз данных, включая ER-диаграммы и компоненты БД Практику работы с несколькими популярными СУБД (PostgreSQL, SQL Server, MySQL, Oracle, SQLite) Базовый и продвинутый синтаксис SQL-запросов, включая SELECT, JOIN, агрегатные функции, оконные функции и другие Практику с применением индексов, триггеров, хранимых процедур и функций для оптимизации работы с данными Знание принципов транзакций и их роли в обеспечении целостности данных Практику оптимизации производительности запросов и управление большими объемами данных Знания особенностей работы с JSON, геоданными и полнотекстовым поиском в разных СУБД. 📈 Присоединяйтесь на курс и повысьте свой уровень в знании SQL: https://tglink.io/0267f993ac06?erid=2W5zFFv4z7S Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

LIMIT + OFFSET и «вечная прокрутка»: как делают Instagram-ленты 📜➡️ Зачем знать? На собеседованиях часто просят: «Сделай API
LIMIT + OFFSET и «вечная прокрутка»: как делают Instagram-ленты 📜➡️ Зачем знать? На собеседованиях часто просят: «Сделай API, чтобы лента грузилась порциями». Понимание пагинации важно и для новичков — вы сможете писать быстрые, масштабируемые запросы. ──────────────────────── 1️⃣ Классический способ — LIMIT + OFFSET

-- страница 3, по 20 записей
SELECT *
FROM posts
ORDER BY created_at DESC
LIMIT 20 OFFSET 40;
Работает просто, но есть три проблемы: 🔹 OFFSET N сначала пропускает N строк → чем дальше, тем медленнее. 🔹 Если за время прокрутки добавятся новые посты, пользователь увидит дубликаты или пропуски. 🔹При больших значениях OFFSET сервер читает тысячи строк зря. 2️⃣ Key-set pagination (a.k.a. «лента без дыр») Идея: вместо «пропустить N» передаём последний id/дату уже загруженной записи и берём следующие сверху.

-- первый запрос (стартовая лента)
SELECT *
FROM posts
ORDER BY created_at DESC
LIMIT 20;

-- фронт получает последнюю дату 
→ next_cursor = '2025-05-26 10:15:00'

-- второй запрос (следующая порция)
SELECT *
FROM posts
WHERE created_at < '2025-05-26 10:15:00'
ORDER BY created_at DESC
LIMIT 20;
Плюсы: ✅ Нет медленного OFFSET — используется индекс по created_at. ✅ Новые посты не «вставляются» в уже просмотренную часть, дубликатов нет. ✅ Маркер-курсор можно прятать в URL или JSON‐ответе. 3️⃣ Что передавать в качестве курсора? 🔹 Авто-инкремент id — легко, но если бывают «дыры» (удаления) — используйте < id. 🔹Дата/время — удобно, но в редких случаях возможны совпадения секунд. Можно добавить второй критерий:

WHERE (created_at < :cursor_date)
   OR (created_at = :cursor_date AND id < :cursor_id)
4️⃣ Советы и грабли ⚠️ 🔹Создайте индекс (created_at DESC) или (created_at, id) — иначе даже key-set будет сканировать всю таблицу. 🔹Никогда не показывайте номер страницы пользователю, если используете key-set: курсор — это дата/ID, а не «страница 5». 🔹Для поиска по разным фильтрам (например, user_id) добавляйте их в индекс (user_id, created_at). ✅ Итог 🔹LIMIT + OFFSET подходит для админ-таблиц или маленьких данных. 🔹Для «бесконечных» лент используйте key-set pagination: быстрее, без дубликатов, идеально для мобильных фидов в духе Instagram/ТикТок. Потренируйтесь: создайте таблицу posts, сгенерируйте 100 000 строк, сравните скорость OFFSET 90000 и key-set. Результат удивит! 🚀

❓Хотите овладеть Spark на профессиональном уровне? Приглашаем дата-инженеров 26 мая в 20:00 на открытый урок «Spark в Kuberne
❓Хотите овладеть Spark на профессиональном уровне? Приглашаем дата-инженеров 26 мая в 20:00 на открытый урок «Spark в Kubernetes». На занятии мы рассмотрим особенности и варианты запуска Spark в Kubernetes. 🔊 Вебинар проведет Вадим Заигрин, Team Lead команд инженеров данных на разных проектах. Продолжить освоение инструментов дата-инжиниринга вы сможете на онлайн-курсе «Spark Developer» от OTUS. Воспользуйтесь велком скидкой по промокоду Early_Spark_5 ➡️ Ссылка для регистрации: https://tglink.io/a013417c08ba?erid=2W5zFHj7gJU #реклама О рекламодателе

CASE в ORDER BY: сортируем по условию 🔄 Иногда нужно показать записи не просто «по алфавиту» или «по дате», а сначала важные
CASE в ORDER BY: сортируем по условию 🔄 Иногда нужно показать записи не просто «по алфавиту» или «по дате», а сначала важные, потом второстепенные. В MySQL (и в SQL вообще) это делается через выражение CASE прямо в ORDER BY. 💡 Зачем знать? Вопрос часто звучит на собеседованиях: «Как вывести VIP‑клиентов сверху, а остальных — по имени?» Умение написать условную сортировку показывает, что вы понимаете SQL‑движок, а не только копируете примеры. 🔹 Базовый пример: VIP‑клиенты выше остальных

SELECT name, is_vip
  FROM customers
  ORDER BY 
    CASE WHEN is_vip = 1 THEN 0 ELSE 1 END,
    name; 
    -- внутри групп сортируем по алфавиту
▶️ CASE возвращает 0 для VIP, 1 — для всех остальных. ▶️ В порядке сортировки 0 идёт раньше 1, поэтому VIP‑ы будут первыми 🔹Сложнее: приоритеты A > B > C → остальные

SELECT name, status
FROM orders
ORDER BY CASE status
    WHEN 'A' THEN 0
    WHEN 'B' THEN 1
    WHEN 'C' THEN 2
        ELSE 3
    END,
    created_at DESC;
▶️ Сначала все со статусом A, потом B, затем C, затем остальные. ▶️ Внутри каждой группы — свежие заказы выше (по дате). Типичные ошибки ⚠️ 1️⃣ NULL‑ы: если столбец может быть NULL, добавьте явную проверку

CASE WHEN col IS NULL THEN …
2️⃣ Числа вместо строк: не забывайте, что CASE должен возвращать однотипные значения (в примерах — всегда INT). 3️⃣ Производительность: выражение в ORDER BY отключает использование индекса. Для больших таблиц можно создать сгенерированный столбец с тем же CASE и проиндексировать его.

ALTER TABLE customers
  ADD vip_sort TINYINT AS (CASE WHEN is_vip = 1 THEN 0 ELSE 1 END) STORED,
  ADD INDEX (vip_sort);
Итоги ✅ 🔸CASE в ORDER BY даёт гибкую условную сортировку без подзапросов. 🔸Легко расставить приоритеты: VIP, скидки, статусы… 🔸Следите за NULL‑ами и индексацией при больших объёмах.

Системная аналитика | DWH. Работа в IT не только для программистов😉 Привет! Меня зовут Арина и я системный аналитик DWH в кр
Системная аналитика | DWH. Работа в IT не только для программистов😉 Привет! Меня зовут Арина и я системный аналитик DWH в крупном ритейле. Тебе интересна сфера IT? А работа с данными, бизнесом и разработкой?  На своем канале я делюсь своим опытом в IT, рассказываю, как начать карьеру аналитика и какие направления для развития существуют. Обсуждаем: - системный (и не только) анализ в IT - делимся инсайтами по работе с данными и актуальными трендами в отрасли - говорим про зарплаты Давайте анализировать вместе💅! Подпишись на Системная аналитика | DWH Реклама. Павлова А.О. ИНН 027722774802.