SQL Ready | Базы Данных
Авторский канал про Базы Данных и SQL Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Cотрудничество: @energy_c РКН: https://clck.ru/3QREBc
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام SQL Ready | Базы Данных
تُعد قناة SQL Ready | Базы Данных (@sql_ready) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 17 709 مشتركاً، محتلاً المرتبة 7 345 في فئة التكنولوجيات والتطبيقات والمرتبة 37 222 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 17 709 مشتركاً.
بحسب آخر البيانات بتاريخ 17 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 691، وفي آخر 24 ساعة بمقدار 41، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 12.44%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 5.98% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 2 198 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 057 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 23.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل sql, строка, users, индекс, user_id.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
РКН: https://clck.ru/3QREBc”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 18 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
• Почему логика обновить + вставить ломается; • Как зафиксировать правило на уровне базы; • Как условный уникальный индекс предотвращает дубликаты.Подход, который убирает класс ошибок с конкурентным доступом и делает данные консистентными независимо от нагрузки. ➡️ SQL Ready | #гайд
sales(id, revenue, orders_count)
Самый очевидный вариант:
SELECT
id,
revenue / orders_count AS avg_order_value
FROM sales;
На первый взгляд всё нормально. Но как только orders_count = 0, начинаются проблемы: в ряде СУБД такой запрос упадёт с ошибкой.
Обычно в таких местах используют NULLIF:
SELECT
id,
revenue / NULLIF(orders_count, 0) AS avg_order_value
FROM sales;
Что здесь происходит: NULLIF(orders_count, 0) вернёт: orders_count, если это не ноль; NULL, если это ноль.
Соответственно: если знаменатель не ноль — деление выполняется как обычно; если знаменатель ноль — получится NULL.
И это как раз правильное поведение. Потому что NULLIF не исправляет данные и не подменяет ноль каким-то удобным значением. Он просто говорит: в этой строке результат не определён.
Иногда после этого пишут так:
SELECT
id,
COALESCE(revenue / NULLIF(orders_count, 0), 0) AS avg_order_value
FROM sales;
Так делать можно, но только если 0 здесь действительно имеет смысл.
Потому что: NULL — значение не определено; 0 — значение определено и равно нулю. Это разные вещи. И подмена одного другим — уже не технический, а смысловой выбор.
Ещё пример:
SELECT
id,
success_count * 100.0 / NULLIF(total_count, 0) AS success_percent
FROM stats;
Почему именно 100.0, а не 100? Чтобы не получить целочисленное деление в тех СУБД, где дробная часть иначе отбросится.
То же самое можно записать и через CASE:
SELECT
id,
CASE
WHEN orders_count = 0 THEN NULL
ELSE revenue / orders_count
END AS avg_order_value
FROM sales;
Это тоже нормальный вариант. Но когда задача именно в защите от деления на ноль, NULLIF обычно короче и читается быстрее.
Ещё момент, который часто путают:
SELECT
SUM(revenue) / NULLIF(SUM(orders_count), 0) AS avg_order_value
FROM sales;
а также:
SELECT
AVG(revenue / NULLIF(orders_count, 0)) AS avg_order_value
FROM sales;
Это разные расчёты. В первом случае — общая выручка делится на общее число заказов. Во втором — считается среднее от построчных значений, причём AVG пропускает NULL.
🔥 Итог простой: NULLIF(x, 0) — приём, который в реальных запросах спасает. Особенно когда хочется не просто чтобы не упало, а чтобы результат оставался корректным по смыслу.
➡️ SQL Ready | #практикаОставляю ссылочку: GitHub 📱➡️ SQL Ready | #репозиторий
CREATE INDEX idx_orders_user_created
ON orders (user_id, created_at DESC)
INCLUDE (total, status);
INCLUDE добавляет дополнительные колонки в индекс (payload), но они не участвуют в поиске и сортировке, часто это выгоднее, чем делать их частью ключа:
SELECT user_id, created_at, total, status
FROM orders
WHERE user_id = 42
ORDER BY created_at DESC
LIMIT 1;
Теперь все нужные поля есть в индексе, и PostgreSQL может выполнить запрос через Index Only Scan, уменьшая или исключая обращения к таблице (heap):
EXPLAIN ANALYZE SELECT ...
В плане вы увидите Index Only Scan (иногда с Heap Fetches) вместо Index Scan — это значит, что обращения к таблице сокращены или отсутствуют.
🔥 Один из практических бустов в read-heavy сценариях и частых API-запросах.
➡️ SQL Ready | #советDISTINCT позволяет легко отфильтровать дубликаты на уровне запроса — без дополнительной логики.
Выберем все уникальные города из таблицы клиентов:
SELECT DISTINCT city FROM customers;
Теперь получим только уникальные пары "страна + город":
SELECT DISTINCT country, city FROM customers;
А вот как посчитать количество разных городов:
SELECT COUNT(DISTINCT city) FROM customers;
В PostgreSQL можно выбирать первую уникальную строку по группе значений:
SELECT DISTINCT ON (user_id) *
FROM logins
ORDER BY user_id, login_time DESC;
🔥 DISTINCT полезен для отчётов, списков, фильтрации и аналитики. Но помните: он влияет на производительность — особенно при работе с большими таблицами.
➡️ SQL Ready | #практикаDDL. Хотим изменить данные внутри — используем DML. А если нужно просто вытянуть информацию — поможет DQL с её незаменимым select.
Полезно держать под рукой, чтобы не забыть!
➡️ SQL Ready | #ресурсОсновные функции обработки строк в Oracle SQL: извлечение подстрок, определение позиции подстроки, вычисление длины строки, преобразование регистра, удаление лишних символов по краям, замена фрагментов текста и дополнение строки до заданной длины.
➡️ SQL Ready | #шпора• Объясняется, как на самом деле работают оконные функции в SQL и почему результаты иногда отличаются от ожидаемых;
• Разбираются ключевые типы оконных фреймов — ROWS, RANGE и GROUPS, а также их влияние на вычисления;
• Показано, как правильно задавать границы окна (UNBOUNDED PRECEDING, CURRENT ROW, FOLLOWING) для накопительных итогов, скользящих средних и аналитических запросов.
🔊 Продолжайте читать на Habr!➡️ SQL Ready | #статья
first_name, middle_initial, last_name.
Таблица условно такая:
users(id, first_name, middle_initial, last_name)
Первое, что обычно пишут:
SELECT first_name || ' ' || middle_initial || ' ' || last_name
FROM users;
И тут важный момент: если хотя бы одно значение NULL, всё выражение тоже уйдёт в NULL.
То есть если middle_initial = NULL, то результат будет не Emily Johnson, а просто NULL.
В таких случаях удобнее использовать CONCAT_WS:
SELECT CONCAT_WS(' ', first_name, middle_initial, last_name)
FROM users;
CONCAT_WS склеивает значения через разделитель и просто пропускает NULL.
Если middle_initial = 'A': Emily A Johnson. Если middle_initial = NULL: Emily Johnson.
Плюс не нужно отдельно думать про лишние пробелы — разделитель вставится только там, где есть значение.
Важно: CONCAT_WS пропускает именно NULL. Пустая строка не игнорируется.
То же самое можно собрать и через COALESCE, например так:
SELECT
COALESCE(first_name || ' ', '') ||
COALESCE(middle_initial || ' ', '') ||
COALESCE(last_name, '')
FROM users;
Но это уже выглядит тяжелее, особенно когда полей больше двух-трёх.
🔥 Так что для таких кейсов CONCAT_WS обычно самый нормальный вариант: и короче, и читается лучше.
➡️ SQL Ready | #практика- разработчиков - девопсов и админов - специалистов по данным и ML - специалистов поддержки и сопровождения - тестировщиков и безопасниковВнутри 20+ модулей: от установки Linux и работы с файлами до сетей, прав, дисков, процессов, автоматизации на Bash и многого другого. Всё сразу закрепляется на практике (200+ заданий с автопроверкой) Материал подаётся понятным языком, шаг за шагом, на реальных примерах и с наглядными схемами После прохождения вы получите сертификат, который можно добавить в резюме. В ближайшие 48ч курс доступен со скидкой 30% по промокоду «
READY30»: открыть курс на Stepik