Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Классическая игра в аркадном стиле для любителей ретро-игр. Защитите космический корабль с Печенькой (и не только) на борту, проходя уровни.

Космический арканоид

Арканоид, Аркады, Веселая

Играть

Топ прошлой недели

  • Animalrescueed Animalrescueed 54 поста
  • paranoidLynx paranoidLynx 11 постов
  • AlexKud AlexKud 35 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
1
VelStyling
VelStyling
18 часов назад
Серия SQL: знакомство

AVG. Почему "среднее" не всегда среднее⁠⁠

Когда мы видим AVG, кажется, всё просто:

Возьми все значения и найди среднее арифметическое.

Но на практике AVG часто ведёт себя не так, как ты ожидаешь — и это причина десятков аналитических факапов в отчётах.

AVG. Почему "среднее" не всегда среднее

А пока подписывайся на мой каналНа связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

Что делает AVG()?

AVG() - агрегатная функция. Она считает среднее значение по всем строкам, которые попали в выборку после фильтрации WHERE

SELECT AVG(column_name)

FROM table_name

WHERE condition;

Пример:

| id | salary |
| -- | ------ |
| 1 | 1000 |
| 2 | 2000 |
| 3 | NULL |
| 4 | 3000 |

SELECT AVG(salary) FROM employees;

Результат → 2000

❗ Почему не (1000 + 2000 + 0 + 3000) / 4 = 1500?

Потому что AVG игнорирует NULL.
Он считает (1000 + 2000 + 3000) / 3.

Если тебе нужно учесть “отсутствие зарплаты” как ноль —
надо явно это сказать базе:

SELECT AVG(COALESCE(salary, 0)) FROM employees;

Где используется AVG

AVG() — базовый инструмент в аналитике:

  • 📈 средний чек (AVG(order_amount))

  • 💰 средняя зарплата по отделу

  • 🕒 среднее время выполнения заказа

  • ⭐ средний рейтинг продукта

Но это только верхушка айсберга.
Ниже — интересные кейсы, где AVG используется неочевидно, но мощно 👇

Обычный AVG считает всё одинаково,
но в реальном мире “вес” данных может быть разный.

Пример — средняя оценка курса:

| user_id | rating | reviews |
| ------- | ------ | ------- |
| 1 | 5 | 1 |
| 2 | 4 | 20 |

Если ты просто возьмёшь AVG(rating) → 4.5
Но по факту второй пользователь оставил 20 отзывов, его мнение должно весить больше:

SELECT SUM(rating * reviews) / SUM(reviews) AS weighted_avg

FROM ratings;

Вот это уже взвешенное среднее, и результат будет ближе к 4.

AVG не коммутативен в агрегациях

AVG(AVG(...)) ≠ AVG(...)

Пример:

| group | value |

| ----- | ----- |

| A | 10 |

| A | 20 |

| B | 100 |

| B | 100 |

| B | 100 |

SELECT AVG(avg_val) FROM (

SELECT group, AVG(value) AS avg_val

FROM t GROUP BY group

) s;

Результат будет → 57.5
А реальное среднее по всей таблице = 86.

Почему?
Потому что при втором AVG каждая группа имеет одинаковый “вес”,
а не количество строк. Это типичный аналитический капкан.

AVG в окнах (window functions)

AVG() можно использовать по “скользящему окну”, чтобы считать динамику:

SELECT

date,

AVG(price) OVER (ORDER BY date ROWS 6 PRECEDING) AS moving_avg_7d

FROM stock_prices;

👉 Это 7-дневное скользящее среднее — классика анализа временных рядов, трейдинга и предсказания трендов.

Среднее как критерий “нормальности”

В аналитике AVG часто используют вместе со STDDEV:

STDDEV (Standard Deviation) — стандартное отклонение (среднеквадратичное отклонение). Это статистическая мера разброса данных относительно их среднего значения в определённом периоде.

SELECT *

FROM purchases

WHERE amount > AVG(amount) + 3 * STDDEV(amount);

Так находят аномально большие значения — подозрительные платежи, мошеннические операции и т.д.

AVG по датам — это тоже работает

Мало кто знает, что AVG() можно применять даже к датам:

SELECT AVG(order_date)::date FROM orders;

PostgreSQL переведёт даты во внутренние числа и вычислит “среднюю дату” —
по сути, середину временного диапазона.
Это удобно, если хочешь понять, когда чаще всего происходили события.

AVG и производительность

AVG() всегда вычисляется через SUM и COUNT,
поэтому если ты делаешь:

SELECT COUNT(*), SUM(amount), AVG(amount)

— оптимизатор посчитает всё за один проход по данным.
Но если AVG в отдельном запросе — будет второй проход.
Мелочь, а при миллионах строк чувствуется.

Мой канал На связи: SQL ждет тебя, если ты тоже хочешь познакомиться с базовым языком для аналитики данных.

Подписывайся!

Показать полностью 1
[моё] Аналитик Аналитика Отчетность Microsoft Excel SQL База данных Длиннопост
0
10
IliaHohlov
IliaHohlov
4 дня назад
Лига программистов

Собеседование по SQL: 4 способа подсчитать количество определённой буквы в слове⁠⁠

Нужно решить задачу на собеседовании разными способами: посчитать сколько раз встречается определённая буква в слове или фразе.

Способ 1: Узнать на сколько символов уменьшится длина слова, если функцией REPLACE удалить все вхождения этой буквы из него:

Это и другие решения будут на примере СУБД ORACLE. На самом деле способов решения подобных задач куда больше, но пока ограничимся четырьмя.

Способ 2: Представить слово как таблицу из одного столбца из его букв, и функцией COUNT подсчитать количество нужной буквы. Вначале напишем запрос, который делал бы таблицу из букв слова:

Теперь напишем SELECT из этой полученной таблицы. Подсчитаем сколько строчек с нужной буквой:

Способ 3: Развернуть слово из строки в столбец по аналогии с предыдущим решением, и с помощью PIVOT подсчитать количество строк с нужной буквой:

Можно даже подсчитать количество вхождений каждой буквы из которых состоит слово или фраза:

Способ 4: Использовать регулярные выражения:

Последний способ оказался совсем простой, да? На практике я стараюсь не пользоваться регулярными выражениями, так как производительность такого кода значительно ниже, особенно на больших объёмах данных.

Изучение чужого кода позволяет открывать новые возможности языка. Помогает узнавать новые функции и способы их применения.

Буду рад лайку, если понравилась статья! И заходи на мой Телеграм канал. Сюда регулярно выкладываю новые задачи с собеседований по SQL и решаем реальные практические задачи!

Показать полностью 6
Программирование IT Тестирование Собеседование SQL Oracle Программист Telegram (ссылка) Длиннопост
1
7
VelStyling
VelStyling
5 дней назад
Серия SQL: знакомство

COUNT и SUM: как SQL считает⁠⁠

Когда мы слышим «COUNT» и «SUM» мы подразумеваем - «считает строки», «суммирует числа»

Но даже для таких действий есть тонкости и нюансы.

А пока подписывайся на мой канал На связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

COUNT и SUM: как SQL считает

В большинстве случаев мы используем 3 вида COUNT

  • COUNT(*) — считает все строки, даже пустые.

  • COUNT(column) — считает только те строки, где есть данные.

  • COUNT(DISTINCT column) — считает уникальные значения в column.

Рассмотрим на конкретном примере:

| id | name | gift |
-------------------------------
| 1 | Оля | Торт |
| 2 | Вася | NULL |
| 3 | Маша | Цветы |
| 4 | Петя | Торт |
| 5 | Катя | NULL |
| 6 | Оля | Торт |

COUNT(*)

Считаем все строки, независимо от содержимого колонок:

SELECT COUNT(*) FROM guests;

Результат: 6

  • Всего 6 гостей пришло.

  • Неважно, принес ли кто-то подарок или нет, учитывается каждая строка.

COUNT(gift)

Считаем только те строки, где колонка gift не NULL:

SELECT COUNT(gift) FROM guests;

Результат: 4

  • Только Оля (Торт), Маша (Цветы), Петя (Торт), Оля (Торт) учитываются.

  • Вася и Катя, у которых gift = NULL, не считаются.

  • Эта разница показывает: сколько записей реально имеют данные по этой колонке.

COUNT(DISTINCT gift)

Считаем уникальные подарки:

SELECT COUNT(DISTINCT gift) FROM guests;

Результат: 2

  • Есть только два уникальных подарка: Торт и Цветы.

  • Независимо от того, сколько гостей принесли одинаковый подарок, каждый подарок считается один раз.

🔍 Что это говорит при анализе данных

  • COUNT(*) — общее количество записей (все строки).

  • COUNT(column) — сколько строк с заполненным значением в колонке.

  • COUNT(DISTINCT column) — сколько уникальных значений встречается в колонке.

Вывод: разница между этими числами может показать пропуски (NULL) и повторяющиеся данные. Это важно при анализе — если просто взять COUNT(*), можно недооценить проблему с пропущенными значениями.

Ну а теперь рассмотрим SUM

Чтобы показать, как эта функция работает и какие тонкости бывают, рассмотрим таблицу:
Таблица orders:
| id | customer | amount |
| -- | -------- | ------ |
| 1 | Оля | 100 |
| 2 | Вася | NULL |
| 3 | Маша | 200 |
| 4 | Петя | 150 |
| 5 | Катя | NULL |
| 6 | Оля | 100 |

1️⃣ SUM(amount)
Считаем сумму по колонке amount (игнорирует NULL):

SELECT SUM(amount) FROM orders;

Результат: 550

  • Складываются только числа: 100 + 200 + 150 + 100 = 550

  • NULL не учитываются

  • Если бы все значения были NULL, результат был бы NULL, а не 0

2️⃣ SUM(DISTINCT amount)

Считаем сумму уникальных значений:

SELECT SUM(DISTINCT amount) FROM orders;

Результат: 450

  • Уникальные значения amount: 100, 150, 200

  • Складываем их: 100 + 150 + 200 = 450

  • Показывает, сколько реально различных сумм встречается, игнорируя повторения
    узнаем, сколько различных сумм клиенты реально платят.

    Это полезно, чтобы понять разнообразие корзин, например: есть ли клиенты, которые покупают одинаковые пакеты товаров.

🔍 Важные моменты

  1. NULL не участвуют — всегда нужно помнить, что SUM(column) не считает NULL.

  2. DISTINCT меняет результат — если в колонке повторяются значения, сумма с DISTINCT будет меньше обычной суммы.

  3. Суммирование строк с пропусками — может дать неожиданное ощущение «потери данных».

Вывод:

  • SUM(column) = фактическая сумма всех чисел

  • SUM(DISTINCT column) = сумма только уникальных чисел

  • Важно учитывать NULL, иначе можно получить неожиданные результаты

Показать полностью 1
[моё] Аналитик Аналитика Анализ данных База данных SQL Запросы Самообразование Длиннопост
1
4
VelStyling
VelStyling
6 дней назад
Серия SQL: знакомство

GROUP BY - группировка или источник факапов⁠⁠

Все знают GROUP BY.
Тот самый оператор, который превращает кучу строк в аккуратную табличку с суммами и средними.

Но можно и по-другому взглянуть на GROUP BY

А пока подписывайся на мой канал На связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

GROUP BY - группировка или источник факапов

В большинстве случаев GROUP BY используют вместе с агрегирующими функциями SUM, COUNT или AVG.

Но есть и другие возможности использования группировки.

  1. В качестве изящной замены DISTINCT

    SELECT department FROM employees GROUP BY department;

    работает так же, как

    SELECT DISTINCT department FROM employees;

  2. Группировать можно по выражениям, а не только по столбцам

    Например, хочешь посчитать заказы по годам:

    SELECT EXTRACT(YEAR FROM created_at) AS year, COUNT(*)

    FROM orders

    GROUP BY EXTRACT(YEAR FROM created_at);

    Или сгруппировать товары по тысячам рублей:

    SELECT (price / 1000)::int AS price_group, COUNT(*)

    FROM products

    GROUP BY (price / 1000)::int;

  3. GROUP BY умеет строить иерархии

    ROLLUP, CUBE, GROUPING SETS — три команды богов:

    SELECT region, city, SUM(sales)

    FROM orders

    GROUP BY ROLLUP (region, city);

    → покажет суммы по городам, по регионам и общий итог.
    И всё это одним запросом.

  4. NULL — это тоже группа

    Если у тебя несколько строк с NULL в поле department,
    то GROUP BY department соберёт их все в одну группу NULL.

    SELECT department, COUNT(*)

    FROM employees

    GROUP BY department;

    Логичней использовать COALESCE, чтобы потом не работать с пустыми строками

    SELECT COALESCE(department, 'Unknown') AS department, COUNT(*)

    FROM employees

    GROUP BY COALESCE(department, 'Unknown');

  5. SELECT vs GROUP BY — всё, что не агрегат, должно быть в GROUP BY

    SELECT department, name, COUNT(*)

    FROM employees

    GROUP BY department;

    Запрос упадёт, потому что name не в агрегате и не в GROUP BY.

    В PostgreSQL есть хитрости: можно использовать array_agg(name) или string_agg(name, ', ')

  6. GROUP BY и оконные функции — не конкуренты

    GROUP BY сжимает таблицу.
    OVER(PARTITION BY) — сохраняет строки, но добавляет агрегат.

    SELECT name, department,

    SUM(salary) OVER (PARTITION BY department) AS dep_total

    FROM employees;

  7. SQL сам решает, как группировать

    PostgreSQL может выбрать:

    • HashAggregate — если данных много

    • Sort + GroupAggregate — если их мало или мало уникальных значений

    То есть одна и та же команда GROUP BY под капотом работает по-разному.
    Вот почему один и тот же запрос на 10k строк работает мгновенно, а на 10M — вечность.

    PostgreSQL не просто тупо группирует строки, а выбирает стратегию (план выполнения) — как именно эту группировку реализовать.

    Это можно отследить в EXPLAIN и уже потом контролировать включением/выключением конкретных алгоритмов.

    SET enable_hashagg = off;

    SET enable_sort = off;

    Это полезно для тестирования или отладки - посмотреть, как изменится план.

GROUP BY — это не просто «посчитать среднюю зарплату по отделу».
Это мощный инструмент, который может:

  • имитировать DISTINCT

  • строить иерархические отчёты

  • объединяться с оконными функциями

  • …и при этом легко устроить тебе день боли, если ты не знаешь, что делаешь 😅

Показать полностью 1
[моё] SQL Аналитик Аналитика Анализ данных База данных Саморазвитие Запросы Длиннопост
0
oyalchan
oyalchan
10 дней назад

Хочу найти стажировку в IT...⁠⁠

Искал на hh.ru много предложений, много откликался. Больше откликался на стажировки с Python разработкой и DevOps. У меня из основных навыков - Python, Linux, SQL. Не против найти стажировку с другими языками. С каждым разом убеждаюсь, что нереально сейчас найти даже стажировку в IT..

Не могу не сказать тот факт, что несколько лет назад брали сразу на оплачиваемую работу полностью без опыта! Я уверен, что в процессе работы можно и так научиться всему, но щас работодатели ждут от стажёра уже приличных навыков. О май гад.. щас даже на стажировку не попадешь. Связей у меня нет в IT, чтобы БЫЛ ШАНС устроится на работу в IT(в других сферах связей тоже нет) У кого был опыт стажировки - посоветуйте пожалуйста норм компании и как устроиться в эти компании..

[моё] Python IT DevOps SQL Программист Linux Текст
35
Блог компании
Finder
Finder
11 дней назад

ТОП-16 курсов Data Engineering: онлайн-обучение на инженера данных бесплатно и платно⁠⁠

Один из перспективных направлений обучения в IT сейчас — Data Engineer курсы. Эта профессия связана с обработкой big data, а также созданием и поддержкой хранилищ данных и их инфраструктуры. А работать по ней можно как в проектах data science, так и в аналитике. Освоить специальность смогут все со знанием SQL, навыками Python и опытом решения практических задач в программировании. А Data Engineering курсы уже позволят изучить технологии big data и научат применять инструменты для их анализа и обработки.

Я рассмотрела не один десяток таких программ и собрала список из 16 лучших вариантов. В первой части обзора будет краткое и подробное описание ТОП-10, а во второй — список еще 6 неплохих предложениях. Также для некоторых курсов я нашла дополнительные эксклюзивные скидки, акции и промокоды.

ТОП-10 лучших курсов Data Engineer в 2025 году

  1. Дата-инженер от Нетологии — курс от специалистов Яндекса и Сбербанка, после которого в портфолио появятся сразу 6 готовых проектов.

  2. Профессия Data Engineer от Skillbox — программа с вечным доступом, в формате для гуманитариев и с разными дополнительными курсами в подарок.

  3. Инженерия данных от Нетологии и НИУ ВШЭ — направление для специалистов, уже получивших высшее образование в любой математической области.

  4. Инженер данных с нуля от Яндекс Практикума — программа профессиональной переподготовки с поддержкой наставников и free-доступом к Yandex GPT.

  5. Инженер данных от Хекслета — курс со стажировкой на реальных проектах, 80% практики и карьерным сопровождением после окончания учебы.

  6. Инженер данных от Karpov.Courses — еще один курс с помощью в устройстве на работу, который даже включает в себя симуляторы собеседований.

  7. Data Engineer от Otus — на программе вебинары всегда проходят в прямом эфире, а всем студентам дарят стартовый курс по Python.

  8. Data-инженер от Слёрм — курс с бесплатным доступом на 3 дня, в течение которых студенты успевают выполнить собственный реальный проект.

  9. Профессиональная переподготовка Инженер данных от АПОК — несмотря на свое название, проходит «с нуля» и наличия профессионального опыта не требует.

  10. Инженер больших данных (Big Data Engineer) от Специалист.ru — комплексная учебная программа из 11 отдельных курсов и с гибким графиком обучения.

Онлайн-курсы Data Engineer

1. Дата-инженер | Нетология

Используйте промокод kursfinder, чтобы получить скидку 7%

Получить скидку >>>

Обучение Data Engineer с free-доступом к Yandex Cloud, в рамках которого студенты учат особенности проектирования хранилищ данных, а также узнают правила выбора DWH на основе конкретных задач и бюджетов бизнеса. Также на курсе проходят разные процессы обработки данных, обучаются работе со Spark SQL, DataFrame и т. д. И, что немаловажно, изучают, как эффективнее презентовать важные для компании данные, и получать отдачу.

Кроме того, участники курса выполняют шесть проектов для своего личного портфолио и учатся трансформации в Pentaho. А также разрабатывают запросы SQL под аналитические задачи и не только запускают базу данных, но и наполняют ее с помощью ETL-процессов.

  • Стоимость: от 4 083 руб. в месяц

  • Длительность: от 1 года

  • Формат обучения: вебинары, записи лекций, практические работы, задания на дом

  • Сертификат: есть

Кому подойдет: и начинающим, и опытным специалистам (есть 3 уровня сложности).

Преимущества:

  • гибкий график обучения и бесплатный доступ к Yandex Cloud в процессе обучения, плюс постоянная поддержка кураторов в чате;

  • шанс учиться у преподавателей с большим профессиональным опытом — среди них есть бизнес-архитекторы и аналитики, специалисты Сбербанка, Яндекса и др.;

  • опция возврата денег в том случае, если курс по каким-то причинам не подойдет, а также возможность оформить за обучение бонусный вычет;

  • бонусные курсы по облачной инфраструктуре, Java, визуализации и английскому — в подарок каждому участнику;

  • митапы с экспертами и HR, а также общая практическая направленность обучения и помощь в подготовке к трудоустройству (но не само трудоустройство).

Недостатки:

  • отсутствие подробного разбора домашних заданий — из-за этого может тратиться много времени на самостоятельный поиск дополнительной информации;

  • часть лекция была записана несколько лет назад, хотя IT-рынок уже изменился.

Программа обучения:

  • изучение основ SQL и получения больших данных, проектирование DWH;

  • знакомство с языком Python для анализа данных и Tableau для их визуализации;

  • обучение профессиональной работе с Data Lake & Hadoop;

  • получение навыков работы с потоковыми данными;

  • подробное ознакомление с облачными технологиями в работе с big data.

Ознакомиться с полной программой >>>


2. Профессия Data Engineer | Skillbox

Используйте промокод kursfinder, чтобы получить скидку 50%

Применить промокод>>>

Комплексное обучение Data Engineering позволяет пройти путь от первого шага в области анализа данных до уровня Junior. Причем учиться можно без привязки времени, а все обучающие материалы сохраняются у участников курса в вечном доступе. В процессе обучения уделяется много внимания навыкам программирования на Python, SQL и работе с технологиями big data. А практические занятия строятся на реальных задачах из бизнеса.

Также пользователи учатся применять инструменты для построения Data Lake, и по итогу получают сертификат, с которым могут претендовать на достойные рабочие места. Кроме этого, курс был обновлен в 2025 году, и соответствует современным требованиям индустрии.

  • Стоимость: от 5 848 руб. в месяц

  • Длительность: 9 месяцев

  • Формат обучения: записи лекций, задания на дом, проекты, онлайн-тренажеры

  • Сертификат: есть

Кому подойдет: новичкам и уже опытным программистам или аналитикам.

Преимущества:

  • возможность учиться даже гуманитариям — все темы курса объясняются «с нуля» и максимально подробно;

  • free-доступ к Yandex Cloud в течение всего срока обучения, а также 3 онлайн-курса в подарок плюс шанс на получение дополнительной скидки;

  • добавление в портфолио 3 проектов (в случае хороших успехов в учебе) и помощь в трудоустройстве, включая крупнейшие IT-компании;

  • постоянная поддержка кураторов, а также общение в чате с другими участниками курса — для создания мотивирующей атмосферы;

  • обновленные модули по машинному обучению и аналитике, а также актуальность информации как таковая — все темы были доработаны или изменены.

Недостатки:

  • блоки не синхронизированы, что может приводить к повторениям информации; 

  • нехватка подсказок в некоторых учебных заданиях — из-за этого приходится искать много информации самостоятельно, на что не всегда есть время;

  • не всегда полное раскрытие темы — недостаток теории для выполнения практики.

Программа обучения:

  • введение в само направление Data Science — базовое и более продвинутое;

  • изучение основ статистики, теории вероятностей и математики для Data Science;

  • прохождение специализации по машинному обучению;

  • еще одна специализация, уже по анализу данных;

  • подтверждение навыков через выполнение финального проекта.

Ознакомиться с полной программой >>>


3. Инженерия данных | Нетология и НИУ ВШЭ

Используйте промокод kursfinder, чтобы получить скидку 7%

Получить скидку >>>

Еще одна программа по профессии инженер данных, обучение в которой дает серьезный объем знаний и необходимую для успешной реализации в специальности квалификацию. В ходе курса пользователи изучают сразу 3 актуальных языка программирования, учатся владеть инструментами разработки и проводить аналитику больших баз данных, а также автоматизировать эти процессы и др. По окончании получают диплом с приложением на английском.

Более того, если выбрать это дистанционное обучение в рамках магистратуры, то можно получить отсрочку от армии. К тому же, организаторы предоставляют всем возможность сначала ознакомиться с курсом бесплатно — чтобы заранее понять специфику профессии.

  • Стоимость: 200 000 руб. за семестр

  • Длительность: 2 года

  • Формат обучения: видеолекции, онлайн-семинары, практические занятия на дом

  • Сертификат: есть

Кому подойдет: выпускникам технических и естественно-научных факультетов.

Преимущества:

  • онлайн-формат с вебинарами, хакатонами и практикой — это позволяет соединять обучение на курсе с работой (или учиться в ВШЭ из любой точки страны); 

  • преподавательский состав — практикующие специалисты, которые делятся своим реальным опытом и говорят о действительно актуальных сегодня задачах;

  • поддержка от кураторов и активная обратная связь на протяжении всего периода обучения — по любым вопросам, связанным с учебным процессом;

  • акцент на практику — участники курса работают с настоящими данными и только теми задачами, которые предлагают компании-партнеры;

  • обязательные стажировки в крупных компаниях и помощь в трудоустройстве — в рамках программы даже есть спецкурс по успешному выходу на рынок труда.

Недостатки:

  • достаточно высокая стоимость обучения — 2 года по 200 тыс. за семестр;

  • необходимость иметь диплом бакалавра по любой технической специальности — со средне-специальным или гуманитарным образованием на курс не принимают;

  • сложные задания — иногда для них нужна та информация, что не было в лекции.

Программа обучения:

  • освоение работы с такими важными для инженера данных инструментами как SQL, PostgreSQL, Airflow, Yandex Cloud, ClickHouse, CI/CD и др.;

  • обучение более глубокому владению языками Python, SQL и Java, а также сбору big data, трансформации и обработке данных и т. д.;

  • знакомство с главными рабочими задачами дата-инженера и методами их решения;

  • семинары с подготовкой проектов по программной и системной инженерии;

  • участие в хакатоне с демонстрацией навыков командного взаимодействия.

Ознакомиться с полной программой >>>


4. Инженер данных с нуля | Яндекс Практикум

Купите курс с выгодой до 20% при оплате сразу

Купить курс>>>

Программа для тех, кто понимает, что пройти Data Engineering курс бесплатно и получить при этом необходимый для работы практический опыт не получится. И поэтому выбирает изучить навыки программирования на Python и SQL, а также работу с big data, Data Lake и хранилищами в рамках полноценной программы обучения — для всех желающих, включая гуманитариев. Она предлагает интенсивное погружение в темы и решение реальных задач.

Курс ориентирован на практику и применение современных инструментов, включая Spark, Airflow и др. А самые сложные модули успешно проходятся с помощью кураторов. Кроме того, по завершению учебы все участники получают поддержку при устройстве на работу.

  • Стоимость: от 6 899 руб. в месяц

  • Длительность: 11 месяцев

  • Формат обучения: видеолекции в записи, онлайн-тренажеры, воркшопы

  • Сертификат: есть

Кому подойдет: всем, кто хочет освоить новую профессию без опыта в IT.

Преимущества:

  • можно дойти до уровня Junior Data Scientist со статуса абсолютного новичка, а также получать помощь от карьерного центра компании;

  • доступ к учебным материалам в любое время и поддержка экспертов и кураторов в течение всего срока обучения;

  • выполнение 10+ проектов, которые можно добавить в персональное портфолио — с ним диплом государственного образца обычно оценивается лучше; 

  • ставка не на теорию, а на практическую работу — обучение на курсе выстраивается по так называемой спринтовой модели;

  • изучение самых востребованных сегодня технологий и периодически обновляемая программа — для достижения максимальной актуальности.

Недостатки:

  • по отзывам, практических воркшопов меньше, чем этого бы хотелось студентам;

  • часть заданий похожи на работу тестировщика — поиск и отлов багов, ошибок и др., что тоже полезно для студентов, но не входит в саму специальность;

  • материалов лекций мало для выполнения заданий на дом без поиска информации.

Программа обучения:

  • базовое и углубленное изучения языка Python, инструментов разработчика, работы с HTTP-запросами;

  • знакомство с алгоритмами и структурами данных, основами SQL и PostgreSQL, а также продвинутым SQL;

  • проектирование хранилища данных и работа с их витринами, проверка качества и интеграция данных сразу из нескольких источников;

  • создание аналитической базы и Data Lake, реализация потоковой обработки;

  • работа с облачными технологиями и подготовка выпускного проекта.

Ознакомиться с полной программой >>>


5. Инженер данных | Хекслет

Программа, которая попала в лучшие курсы по Data Engineer потому, что делает ставку на практику — на решение реальных рабочих задач и проекты в ней отведено почти 80%. При этом участники сразу получают доступ к коммерческим, а не умозрительным IT-проектам, и учатся работать в командах. Однако в процессе это не так пугающе, как кажется, потому что студентов сопровождают наставники, которые подробно разбирают с ними код, и т. д.

Помимо этого, обучение идет без жестких дедлайнов, а учебные материалы сохраняются у пользователей навсегда. Плюс отдельное внимание уделяется трудоустройству и будущим собеседованиям, включая их имитацию и отработку самых правильных ответов и реакций.

  • Стоимость: от 5 651 руб. в месяц

  • Длительность: 10 месяцев

  • Формат обучения: видеоуроки, онлайн-тренажеры, домашние задания, тесты

  • Сертификат: есть

Кому подойдет: IT-специалистам без опыта и всем, кто хочет перейти в дата-инжиниринг.

Преимущества:

  • отведение на практику 80% всей программы и работа с реальными коммерческими задачами, результаты которых наиболее наглядные и мотивирующие;

  • стажировка с настоящими релизами и поддержка куратора на каждом шаге — в том числе в течение полугода после окончания курса (в процессе поиска работы);

  • наличие бесплатного модуля — для свободного старта и знакомства с форматом еще до внесения оплаты;

  • помощь в составлении резюме и отработка поведения на будущих собеседованиях — для более успешного их прохождения и возможности выбирать компании;

  • гарантия возврата денег за обучение — если получить должность дата-инженера по каким-либо причинам не получится.

Недостатки:

  • сложность материала — если нет никаких базовых познаний в программировании;

  • отсутствие точных ответов от куратора — они дают скорее направление для поиска;

  • тестовая часть — по отзывам студентам, тесты не помогают усвоению материала, и их прохождение нужно только «для галочки».

Программа обучения:

  • введение в основы Data Engineering, языка Python и программирования;

  • знакомство с инструментами разработки и функциями профессионального Python;

  • освоение навыков работы с базами данных и API, а также администрирования;

  • проработка Soft Skills и прохождение отдельного карьерного модуля;

  • стажировка в крупных партнерских компаниях и выполнение выпускного проекта.

Ознакомиться с полной программой >>>


6. Инженер данных | Karpov.Courses

Курс для тех, кому хочется освоить эту профессию с нуля и уверенно приступить к работе сразу после окончания учебы. В ходе программы студенты выполняют более 230 заданий, работают над практическими кейсами и получают максимально приближенный к реалиям опыт. Для этого они развивают навыки программирования, построения хранилищ данных, а также использования SQL, Python, Spark и других инструментов обработки информации.

Причем процесс обучения разработан самой школой и является авторским, а весь учебный материал остается доступным для учеников даже после выпуска. Также они проходят ряд тестовых заданий и формируют профессиональное портфолио из выполненных проектов.

  • Стоимость: 80 750 руб.

  • Длительность: 6 месяцев

  • Формат обучения: видеоуроки, текстовые конспекты, симуляторы, задания на дом

  • Сертификат: есть

Кому подойдет: всем новичкам в IT, а также начинающим дата-инженерам без опыта.

Преимущества:

  • множество практических и тестовых заданий, а также наличие симуляторов для тренировок собеседований;

  • персональная обратная связь от кураторов проекта плюс приоритетный доступ к вакансиям партнерских компаний;

  • создание полноценного профессионального портфолио Junior Data Engineer — с проверкой и рекомендациями от экспертов;

  • прохождение курса на собственной платформе компании — с комментариями по каждому домашнему заданию и доступом к материалам в любое время;

  • гарантия возврата денег в течение 2 недель после старта обучения — если станет ясно, что программа (или сама профессия) не подходит.

Недостатки:

  • чересчур академическая подача материала, которая устраивает не всех студентов;

  • неравномерное соотношение теоретической и практической части в ряде модулей — это создает трудности в усвоении программы;

  • задержки при проверке домашних заданий — из-за большого потока пользователей.

Программа обучения:

  • изучение основ обработки данных — от архитектур систем и до выбора нужных для решения конкретных задач инструментов;

  • работа с базами данных — построение хранилищ, оптимизация запросов и т. д.;

  • создание пайплайнов — начиная со сбора и трансформации данных и заканчивая их правильной загрузкой;

  • приобретение навыков работы с облачными решениями и обучение развертыванию инфраструктуры;

  • разработка идеи финального проекта, его реализация и презентация.

Ознакомиться с полной программой >>>


7. Data Engineer | Otus

Очередная программа, попавшая в топовые курсы по Data Engineering из-за значительного количества практики. Она проходит в Yandex Cloud, где пользователи поэтапно осваивают главные профессиональные инструменты и основы работы с хранилищем данных. Также в процессе уделяется внимание потоковому и пакетному режиму обработки, а в завершении обучения участники могут сами проектировать пайплайны, работать с Apache Spark и т. д.

Также студенты курса получают бесплатный доступ к целому ряду ресурсам и находятся в активном диалоге с преподавателями и кураторами. Отдельно нужно отметить комьюнити платформы — оно большое, быстро развивается и поддерживает всех новых пользователей.

  • Стоимость: 114 000 руб.

  • Длительность: 5 месяцев

  • Формат обучения: вебинары, текстовые материалы, практические задания на дом

  • Сертификат: есть

Кому подойдет: начинающим дата-инженерам, аналитикам и другим IT-специалистам.

Преимущества:

  • учеба в любое удобное время (все лекции можно смотреть в записи) и пожизненный доступ к обучающим материалам;

  • вводный курс по Python в подарок, а также практика в Yandex Cloud — для навыков работы с облачными технологиями в целом;

  • поддержка преподавательского состава по любым вопросам, связанным с учебным процессом, а также добавление во внутреннее Telegram-сообщество;

  • работа на комфортной и аккредитованной платформе, которая включена в реестр отечественного программного обеспечения;

  • создание профессионального портфолио из реальных коммерческих проектов — на базе задач от компаний-партнеров проекта.

Недостатки:

  • несогласованность в работе преподавателей — они могут повторяться по темам;

  • ошибки в раздаточных материалах — например, там встречается устаревший код.

Программа обучения:

  • знакомство с основами дата-инжиниринга и архитектурой систем данных;

  • углубленное изучение программирования на Python, а также продвинутого SQL;

  • работа с облачными платформами, обработка big data с применением Apache Spark;

  • постройка, оптимизация ETL/ELT, работа с разными СУБД и системами хранения;

  • использование функций Docker, разработка и защита выпускного проекта.

Ознакомиться с полной программой >>>


8. Data-инженер | Слёрм

Курс позволяет освоить профессию дата-инженера от А до Я, начиная с базовых знаний и заканчивая участием в проектах крупных компаний. Причем обучение проходит в комфортном для студентов темпе, и после каждого его модуля они выполняют задания на виртуальных стендах — с подробным разбором их решений экспертами. Цель программы — сформировать у аудитории прикладные навыки применения актуального инструментария.

При этом учащиеся могут использовать не только открытые источники, но и свои данные, а итоговый проект становится частью их портфолио. Программа максимально практична и нацелена на бизнес-задачи, а также регулярно обновляется — вместе с изменениями рынка.

  • Стоимость: от 4 735 руб. в месяц

  • Длительность: 120 часов (без дедлайнов)

  • Формат обучения: видеоуроки, работа на онлайн-стендах, практические задания

  • Сертификат: есть

Кому подойдет: начинающим аналитикам баз данных, другим IT-специалистам без опыта.

Преимущества:

  • ориентация на практику — из 120 часов учебной программы на решение реальных задач бизнеса отводится 88;

  • двухгодичный доступ к материалам курса после его завершения, а также получение постоянной менторской поддержки и разбора заданий от специалистов;

  • возможность учиться без привязки не только к месту, но и ко времени — участники курса могут пройти 120 часов за любое удобное им количество недель или месяцев;

  • гарантия актуальности информации и инструментов — после каждого обновления в программе остаются только действительно нужные в моменте технологии;

  • шанс получить корпоративную скидку и оформить налоговый вычет — что делает стоимость обучения еще более выгодной.

Недостатки:

  • недостаточная проработанность материалов, по мнению ряда пользователей;

  • несмотря на обновления, в части тем так и проскакивают уже устаревшие сведения.

Программа обучения:

  • изучение языка программирования Python и терминала задач Data Engineering;

  • знакомство с Hadoop, распределенными файловыми системами и реляционными базами данных;

  • методология и архитектура хранилищ big data, их процессинг и перекладка;

  • обучение обращению с оркестраторами и шинами данных, потоковой аналитикой;

  • обретение навыка работы с ETL-инструментом, изучение оценки качества данных;

  • разработка, выполнение и защита финального проекта.

Ознакомиться с полной программой >>>


9. Профессиональная переподготовка Инженер данных | АПОК

Курс готовит специалистов по работе с большими объемами данных и позволяет им освоить все необходимые инструменты в достаточно сжатые сроки. Студенты изучают особенности хранилищ big data, способы их обработки и подготовки для ML-инженеров и других отделов и т. д. Таким образом, программа рассчитана на то, чтобы они приобрели фундаментальные навыки работы в дата-инженерии, и быстро нашли работу в этой сфере.

Однако так как это программа профессиональной переподготовки, то для поступления на курс надо уметь уже законченное высшее или средне-специальное образование. И желательно математического плана — точных ограничений по профессиям нет, но это упростит учебу.

  • Стоимость: 29 980 руб.

  • Длительность: 1 месяц (250 часов)

  • Формат обучения: вебинары, текстовые конспекты, онлайн-тесты, задания на дом

  • Сертификат: есть

Кому подойдет: всем, кто хочет поменять свою специальность на работу дата-инженера.

Преимущества:

  • отсутствие четкого расписания — учеба в любое удобное время, а также совмещать обучение с работой;

  • высокое качество учебных материалов — структурированная и понятная подача информации, подкрепление теории практическими примерами и т. д.;

  • активная поддержка студентов — преподаватели и методисты отвечают на вопросы и помогают решать разные вопросы в течение всего срока обучения;

  • возможность оформить оплату обучения в рассрочку, а также получить налоговый вычет за эту сумму;

  • при необходимости готовый диплом о профессиональной переподготовке может быть отправлен выпускнику курса по почте (бесплатно).

Недостатки:

  • технические проблемы с учебной платформы — иногда не сохраняются тесты и др.;

  • недостаток практических заданий — по сравнению с остальными программами;

  • высокая интенсивность — освоить 250 часов в течение месяца может быть сложно, особенно если процесс учебы сочетается с работой.

Программа обучения:

  • введение в само направление Data Science, а также работу с данными и основными инструментами дата-инженера;

  • изучение основ статистики для анализа данных и технологий машинного обучения;

  • знакомство с анализом временных рядов и прогнозированием;

  • работа над реальными бизнес-кейсами и настоящими коммерческими задачами;

  • разработка итогового проекта, создание портфолио, подготовка к собеседованиям.

Ознакомиться с полной программой >>>


10. Инженер больших данных (Big Data Engineer) | Специалист.ru

Комплексный курс включает в себя 11 отдельных модулей обучения. Учащиеся начинают освоение специальности с изучения специализированных инструментов Excel, и потом приступают к формированию SQL-запросов и использованию базовых конструкций Python. После этого стартует обучение построению диаграмм и разнообразных графиков, а также знакомство с тем, каким образом big data можно соединять и переформатировать.

Учиться по программе можно в свободном графике — записи лекций и семинаров доступны в любое время и к ним разрешается возвращаться еще в течение полугода после финала обучения. А другие учебные материалы (не видео) остаются у студентов навсегда.

  • Стоимость: 285 290 руб.

  • Длительность: от 4 месяцев

  • Формат обучения: записи лекций, семинары с преподавателями, занятия на дом

  • Сертификат: есть

Кому подойдет: уже подготовленным специалистам с базовыми знаниями по сетевым ОС.

Преимущества:

  • опытный преподавательский состав — не только практикующие программисты или инженеры, но и доктора наук, а также научные сотрудники РАН;

  • подарок за успешное окончание курса (на практике его получают все пользователи) — 3 бесплатные персональные консультации по пройденным темам;

  • участие в «живых» онлайн-семинарах с преподавателями, в ходе которых можно задавать вопросы и получать разбор своих ошибок;

  • обретение не только теоретических знаний, но и практических навыков в решении стандартных рабочих задач современного дата-инженера;

  • гарантированная помощь в трудоустройстве (вплоть до подбора самых подходящих вакансий) и возможность получить налоговый вычет за внесенную оплату.

Недостатки:

  • бессрочный доступ предоставляется только к некоторым материалам курса;

  • большой объем материала — часть лекций растягивается на 3–4 часа без перерывов, и в отзывах можно найти множество предложений разбивать их на куски.

Программа обучения:

  • изучение основ работы с большими данными и анализа данных на языке SQL;

  • программирование на Python и Java — базовые курсы с дополнениями по теме;

  • знакомство с Apache Kafka для разработчиков и основами Apache Hadoop, а также такими инструментами как MapReduce, Hive, Spark и Cassandra;

  • обучение автоматизации рабочих процессов при помощи Airflow;

  • построение пайплайнов — процессов доставки данных из одного места в другое.

Ознакомиться с полной программой >>>


Еще 6 курсов Data Engineer

Так как сегодня это очень востребованное направление, на перечисленных программах по профессии инженер данных курсы в интернете не кончаются. Более того, в предложениях есть и полностью бесплатные варианты — они прекрасно подойдут для знакомства с темой.

  • Прикладной анализ данных и машинное обучение от Skillfactory — программа для всех, кто хочет получить более фундаментальные знания в сфере анализа больших данных. Техническое образование для поступления на курс не требуется, учиться можно с нуля.

  • Инженер данных от Компьютерной Академии ТОП — на курсе студенты могут получить все необходимые для освоения новой профессии знания и навыки. В частности, их обучают управлению потоками big data, работе с базами, обработке больших объемов данных при помощи Apache Airflow и проектировке архитектуры хранилищ.

  • Симулятор «Инженер данных» от Simulative — интерактивный курс с настоящими бизнес-проектами, который подойдет пользователям, предпочитающим практико-ориентированный подход и желающим получить реальный опыт работы с big data.

  • Big Data Engineer от TopTrening — полноценный курс продолжительностью 1 год, который подходит специалистам, уже работающим в сфере big data или в смежных IT-специальностях.

  • Data Engineer от NewProlab — обучающая программа с упором на практику, причем максимально приближенную к реальной работе дата-инженеров.

  • Data Engineer от МФТИ — бесплатное обучение на инженера данных, состоящее из комплекта материалов от преподавателей крупного российского института. По ним пользователи могут освоить работу с Python и SQL, ознакомиться с особенностями Hadoop и Spark, а также разобраться в Apache Kafka, Hive и Git.


Часто задаваемые вопросы

Чем занимается на работе Data Engineer?

Дата-инженеры занимаются созданием и обновлением инфраструктуры данных, а также поддержанием ее работоспособности. Плюс в их обязанности входит разработка и оптимизация процессов загрузки и трансформации big data и их последующего хранения.

Какие навыки нужны, чтобы стать дата-инженером?

Это навыки программирования (Python, SQL), знание баз данных и инструментов для их обработки (Apache Spark, Hadoop и др.), а также облачных технологий и принципов big data. Однако необязательно знать их заранее – множество курсов обучают этому с нуля.

Какие технологические тренды влияют на Data Engineering?

Прежде всего, это распределенные системы обработки данных и облачные технологии для их хранения и анализа. Плюс нельзя не отметить влияние автоматизации процессов ETL и внедрение машинного обучения для анализа информации: всему этому обучают на курсах.

Как в области Data Engineering можно вырасти?

Для этого надо продолжать обучение новым технологиям и методикам обработки данных, а также не отказываться от участия в профессиональных конференциях, вебинарах и т. п. Еще один путь развития — регулярное прохождение курсов для повышения квалификации.

Если я специалист в бизнес-процессах, что мне даст Data Engineering?

В таком случае учеба в этом направлении поможет создавать более эффективные решения для обработки больших данных. Причем именно такие решения, которые будут подходить потребностям определенного бизнеса и, как следствие, повышать показатели его прибыли.

Если обучение Data Engineer уже было, надо ли учиться сейчас? Или сразу идти работать?

Технологий и тенденции в области инженерии данных и IT-сферы постоянно меняются, и поэтому свои знания все же стоит обновить. Это даст возможность эффективнее работать с большими данными, выбирать оптимальные инструменты и двигаться в карьере дальше.


Чтобы пройти любые Data Engineer курсы успешно, нужно заранее оценить свои навыки и уже имеющийся опыт, выбрать подходящую к ним учебную программу, и подключиться к профессиональным сообществам еще на этапе обучения. Это позволит не только влиться в среду и быстрее найти стажировку, но и не потерять мотивацию. Также важно создавать портфолио из выполненных проектов, которое станет важным дополнением к резюме. А с вакансиями проблемы не будет — из-за стремительной цифровизации компаний профессия инженера данных становится ключевой, и бизнес крайне нуждается в таких специалистах.

Показать полностью 11
Обучение Курсы SQL Python Онлайн-курсы Большие данные База данных Блоги компаний Длиннопост
3
VelStyling
VelStyling
12 дней назад
Серия SQL: знакомство

Псевдонимы в SQL⁠⁠

Псевдонимы в SQL (алиасы) кажутся «косметикой», но у них есть подводные камни и тонкости, которые реально влияют на запросы.

Псевдонимы - это временные имена для таблиц или столбцов внутри запроса.

Псевдонимы в SQL

В моем канале На связи: SQL уже есть про это посты: вот этот. Канал я веду с нуля подписчиков. Чтобы показать, что аналитика и SQL это не страшно, а интересно. Присоединяйся, если ты тоже хочешь начать изучать SQL или вспомнить и осознать некоторые нюансы.

SELECT c.name AS customer_name

FROM customers c;

  • c — алиас таблицы customers

  • customer_name — алиас для колонки c.name

Внутри результата ты видишь только customer_name.

Где применяются

Сокращение длинных имён

SELECT o.id, c.name

FROM orders o

JOIN customers c ON o.customer_id = c.id;

- читабельнее, чем всё время писать orders.id, customers.name

JOIN и self-join
Без алиасов нельзя отличить таблицы при самосоединении:

SELECT e1.name, e2.name
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id;

Агрегация и подзапросы
Алиас часто обязателен:

SELECT avg(salary) AS avg_salary

FROM employees;

Derived tables (подзапросы в FROM)
Тут алиас обязателен:

SELECT sub.department, sub.cnt

FROM ( SELECT department, count(*) cnt

FROM employees

GROUP BY department

) sub;

Где их нельзя применять / ограничения

В том же уровне WHERE

SELECT salary * 1.2 AS new_salary

FROM employees

WHERE new_salary > 5000; -- ❌ Ошибка

  • Алиасы доступны только в SELECT/ORDER BY, но не в WHERE или GROUP BY.
    → нужно повторно писать выражение или завернуть в CTE.

    Порядок обработки
    SQL выполняется в порядке: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT.
    Алиасы появляются только после SELECT.
    Поэтому:

    • в WHERE и GROUP BY алиасы ещё не видны;

    • в ORDER BY алиасы уже можно использоват

Нюансы, которые часто забывают

  1. Алиасы влияют только на внешний уровень запроса
    Они не меняют структуру таблицы.
    В EXPLAIN ты увидишь исходные имена столбцов, а не алиасы.

  2. В подзапросах алиас обязателен для таблицы
    Даже если кажется, что можно без него.

SELECT *

FROM (SELECT 1) -- ❌ Ошибка

SELECT *

FROM (SELECT 1) AS t;

  1. ORDER BY может использовать алиас
    Ускоряет жизнь:

    SELECT salary * 1.2 AS new_salary
    FROM employees
    ORDER BY new_salary DESC;

  2. CTE против алиасов
    Если выражение слишком длинное (например, CASE WHEN …), лучше вынести его в CTE вместо алиаса в SELECT → так его можно переиспользовать и в WHERE, и в ORDER BY.

  3. Алиасы могут влиять на читаемость, но и запутывать
    Пример анти-паттерна:

    SELECT u.id AS order_id -- ❌ псевдоним вводит в заблуждение
    FROM users u;

    → плохая идея, потому что вводит читателя в ошибку.

Итог: алиасы — не просто косметика. Это инструмент:

  • для читаемости;

  • для самосоединений и подзапросов;

  • для управления порядком сортировки.

Но они не живут дольше SELECT-а

Подписывайся на мой канал На связи SQL и давай изучать особенности вместе!

Показать полностью 1
[моё] Анализ Аналитика Анализ данных Аналитик SQL Microsoft Excel База данных Запросы Саморазвитие Длиннопост
0
5
kznalp
kznalp
13 дней назад
Postgres DBA
Серия СУБД PostgreSQL

Перенос условий JOIN ON в WHERE в PostgreSQL⁠⁠

Не всегда оптимизация оптимизирует

Не всегда оптимизация оптимизирует

В подавляющем большинстве случаев современный планировщик PostgreSQL обработает условия в JOIN ... ON и в WHERE абсолютно идентично. Оба условия будут участвовать в формировании плана выполнения, и никакой разницы в производительности не будет.

Однако, есть несколько важных нюансов и сценариев, где перенос условий из ON в WHERE может быть полезен или, наоборот, критически важен.

1. Читаемость и однозначность запроса (Самый главный положительный эффект)

Это не прямое последствие для СУБД, а скорее для разработчика, но оно косвенно влияет на качество кода и меньшее количество ошибок.

  • WHERE — это финальное фильтрующее условие. Оно четко указывает, какие строки должны попасть в окончательный результат.

  • ON — это условие связи таблиц. Оно определяет, как строки двух таблиц соотносятся друг с другом.

Разделяя логику связи (ON) и логику фильтрации (WHERE), вы делаете запрос более понятным и легким для поддержки.

Пример:
Предположим, нам нужны все заказы и информация о клиентах, но только для клиентов из Москвы.

-- Менее читаемо (условие связи и фильтрации перемешаны)

SELECT *

FROM orders o

LEFT JOIN customers c ON o.customer_id = c.id AND c.city = 'Москва';

-- Более читаемо и логично

SELECT *

FROM orders o

LEFT JOIN customers c ON o.customer_id = c.id

WHERE c.city = 'Москва'; -- Но ВНИМАНИЕ! Этот запрос не эквивалентен предыдущему!

Здесь ключевой момент: Эти два запроса не эквивалентны. Второй запрос превратит LEFT JOIN в INNER JOIN, потому что условие на таблицу customers в WHERE отфильтрует все строки, где c.city IS NULL (т.е. все "не совпавшие" строки от LEFT JOIN).

2. Потенциальная помощь планировщику в сложных запросах

Хотя планировщик очень умный, в исключительно сложных запросах с множеством JOIN и подзапросов, явное указание финального условия отбора в WHERE может упростить процесс построения плана. Это не гарантированное ускорение, но упрощение логики для планировщика.

  • Что делает планировщик? Он пытается "протолкнуть" условия (push down predicates) как можно ближе к сканированию данных.

  • Разница: Условие в ON должно быть применено во время операции соединения, а условие в WHERE — после него. Иногда явное разделение позволяет планировщику применить фильтр на более раннем этапе, если это выгодно.

На практике эта разница почти всегда нивелируется мощностью планировщика PostgreSQL.

3. Явное указание логики для OUTER JOIN (самая важная практическая разница)

Это обратная сторона медали. Перенос условия из ON в WHERE для LEFT|RIGHT|FULL JOIN кардинально меняет результат запроса.

  • Условие в ON: Фильтрует строки из правой таблицы до того, как будет выполнен JOIN. Строки из левой таблицы остаются, даже если условие не выполнилось.

  • Условие в WHERE: Фильтрует результат после того, как JOIN был выполнен. Для LEFT JOIN это означает, что все строки, где правое поле — NULL (из-за несовпадения), будут отброшены, превращая join по сути во INNER.

Положительным последствием здесь является то, что использование WHERE позволяет вам явно и однозначно указать, что вы хотите видеть только пересекающиеся строки.

-- Хочу всех клиентов и их заказы, но только те заказы, которые > 1000

SELECT *

FROM customers c

LEFT JOIN orders o ON c.id = o.customer_id AND o.amount > 1000;

-- Вернет ВСЕХ клиентов. Для тех, у кого нет больших заказов, поля заказа будут NULL.

-- Хочу только тех клиентов, у КОТОРЫХ ЕСТЬ заказы > 1000

SELECT *

FROM customers c

LEFT JOIN orders o ON c.id = o.customer_id

WHERE o.amount > 1000;

-- Это, по факту, INNER JOIN по условию на заказ. Не вернет клиентов без подходящих заказов.

Выводы

  1. Для INNER JOIN смело переносите условия из ON в WHERE. Разницы в производительности не будет, но запрос станет чище и понятнее. Планировщик обработает их одинаково.

  2. Для OUTER JOIN (LEFT, RIGHT, FULL) понимайте разницу. Перенос условия из ON в WHERE полностью меняет логику запроса. Это не оптимизация, а изменение результата.
    ON: "Как соединять таблицы?"
    WHERE: "Что показывать в финальном результате?"

  3. Положительные последствия переноса в WHERE — это в первую очередь:
    Улучшенная читаемость и сопровождаемость кода.
    Более явное и четкое выражение вашего намерения.
    В редких сложных случаях — потенциально более простой план запроса для СУБД.

Таким образом, главный положительный эффект — смысловой и архитектурный, а не прямой прирост производительности в современных версиях PostgreSQL.

Показать полностью
SQL Postgresql Субд Длиннопост
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии