This media is not supported in your browser
VIEW IN TELEGRAM
🗂 Порядок выполнения sql запроса — и почему алиас в WHERE не работает:
Часто вижу одну и ту же ошибку — человек пишет запрос, придумывает алиас в SELECT, а потом пытается использовать его в WHERE или HAVING. И получает ошибку. Почему?
Всё дело в порядке выполнения SQL.
На самом деле SQL выполняется совсем не в том порядке, в котором мы его пишем. Вот реальная последовательность:
1️⃣ FROM — сначала движок идёт к таблицам
2️⃣ JOIN — потом движок соединяет таблицы
2️⃣ WHERE — фильтрует строки до группировки
3️⃣ GROUP BY — группирует данные
4️⃣ HAVING — фильтрует уже сгруппированные данные
5️⃣ SELECT — только сейчас вычисляются выражения и алиасы
6️⃣ ORDER BY — сортировка результата
7️⃣ LIMIT — обрезание до нужного числа строк
Пример 1 — классическая ошибка с алиасом:
Пример 2 — почему HAVING, а не WHERE:
Пример 3 — вот почему все пишут CTE:
Иногда хочется сначала что-то посчитать, а потом фильтровать по результату. Именно для этого и придумали CTE — они позволяют «сохранить» промежуточный результат и работать с ним как с таблицей.
Видите? В CTE SELECT уже выполнился — алиас revenue существует — и теперь во внешнем запросе WHERE отрабатывает по нему без проблем.
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Сталкивались с этой ошибкой? Или, может, объясняете это джунам — как объясняете? Пишите в комментах!
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Часто вижу одну и ту же ошибку — человек пишет запрос, придумывает алиас в SELECT, а потом пытается использовать его в WHERE или HAVING. И получает ошибку. Почему?
Всё дело в порядке выполнения SQL.
На самом деле SQL выполняется совсем не в том порядке, в котором мы его пишем. Вот реальная последовательность:
1️⃣ FROM — сначала движок идёт к таблицам
2️⃣ JOIN — потом движок соединяет таблицы
2️⃣ WHERE — фильтрует строки до группировки
3️⃣ GROUP BY — группирует данные
4️⃣ HAVING — фильтрует уже сгруппированные данные
5️⃣ SELECT — только сейчас вычисляются выражения и алиасы
6️⃣ ORDER BY — сортировка результата
7️⃣ LIMIT — обрезание до нужного числа строк
Пример 1 — классическая ошибка с алиасом:
-- ❌ Не работает — алиас revenue ещё не существует на шаге WHERE
SELECT
order_id,
amount * 0.9 AS revenue
FROM orders
WHERE revenue > 1000;
-- ✅ Правильно — повторяем выражение напрямую
SELECT
order_id,
amount * 0.9 AS revenue
FROM orders
WHERE amount * 0.9 > 1000;
Пример 2 — почему HAVING, а не WHERE:
-- ❌ Нельзя — WHERE выполняется ДО GROUP BY
SELECT
user_id,
COUNT(*) AS order_count
FROM orders
GROUP BY user_id
WHERE order_count > 5;
-- ✅ Правильно — HAVING фильтрует после группировки
SELECT
user_id,
COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5;
Пример 3 — вот почему все пишут CTE:
Иногда хочется сначала что-то посчитать, а потом фильтровать по результату. Именно для этого и придумали CTE — они позволяют «сохранить» промежуточный результат и работать с ним как с таблицей.
-- ✅ CTE решает проблему: сначала считаем, потом фильтруем
WITH revenue_calc AS (
SELECT
order_id,
amount * 0.9 AS revenue
FROM orders
)
SELECT *
FROM revenue_calc
WHERE revenue > 1000;
Видите? В CTE SELECT уже выполнился — алиас revenue существует — и теперь во внешнем запросе WHERE отрабатывает по нему без проблем.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22❤🔥3🐳2
This media is not supported in your browser
VIEW IN TELEGRAM
Условие: Каждый день едете на работу. На пути один светофор: 2 минуты горит зелёный, 1 минуту — красный. Сколько времени вы ожидаемо простоите за 100 поездок?
Задачи на матожидание — любимый инструмент интервьюеров у аналитиков и DS. Выглядят как «логика про жизнь», а проверяют умение считать вероятности. Разберём на пальцах.
1️⃣ Находим цикл светофора
Полный цикл = 2 + 1 = 3 минуты. Вы приезжаете к светофору в случайный момент — считаем, что равномерно распределённый по этим 3 минутам.
2️⃣ Считаем вероятности
P(зелёный) = 2/3 → ждать 0 минут
P(красный) = 1/3 → придётся постоять
3️⃣ Сколько ждать, если попали на красный?
Вот тут сыплются многие. Вы ждёте не всю минуту. Вы приезжаете в случайный момент красной фазы: иногда в самом начале (придется ждать 1 минуту), иногда в конце (придется ждать 0 минут). В среднем — получим:
Среднее ожидание на красном = (1+0)/2 = 0.5 минуты
4️⃣ Собираем матожидание за одну поездку
E = P(зелёный) × 0 + P(красный) × 0.5
E = (2/3) × 0 + (1/3) × 0.5
E = 1/6 минуты ≈ 10 секунд
5️⃣ Умножаем на 100 поездок
100 × 1/6 ≈ 16.7 минуты = 16 минут 40 секунд
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥46❤🔥12🐳6
This media is not supported in your browser
VIEW IN TELEGRAM
Сколько покупок нужно, чтобы собрать все 10 стикеров?
Условие: В наборе 10 наклеек. На кассе дают одну случайную за любую покупку. сколько покупок нужно, чтобы собрать все 10?
Задача на пониманием и умение считать математическое ожидание. Разберём на пальцах:
1️⃣ Главное правило: переворачиваем дробь
Если вероятность равна p, то среднее количество попыток до первого успеха равно 1/p. Например:
Вероятность 1/10 → 10/1 = 10 попыток
Вероятность 5/10 → 10/5 = 2 попыток
2️⃣ Шанс поймать новую наклейку
Собираем по этапам. Чем больше наклеек в альбоме, тем реже попадается новая:
этап 1: собрано 0 → шанс новой 10/10
этап 2: собрано 1 → шанс новой 9/10
...
этап 10: собрано 9 → шанс новой 1/10
3️⃣ Собираем матожидание и считаем ответ
Переворачиваем шанс каждого этапа в число покупок и складываем всё:
этап 1 (запишем общую формулу):
E = 10/10 + 10/9 + 10/8 + ... + 10/2 + 10/1
этап 2 (вынесем общий множитель за скобки):
E = 10 × (1 + 1/2 + 1/3 + ... + 1/10
этап 3 (считаем ответ):
E = 10 × 2.93 ≈ 29 покупок
Почти половина из этих них уходит на последние 2-3 наклейки.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24❤🔥5 3
This media is not supported in your browser
VIEW IN TELEGRAM
📊 DAU, WAU, MAU и sticky factor — метрики активности:
Пришло время разбираться с метриками, начнем с DAU, WAU, MAU и sticky factor😘
1️⃣ Что это
2️⃣ Считаем все три одним запросом
3️⃣ Частая ошибка
4️⃣ Sticky factor
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Как вам такие разборы в формате видео? Делись в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Пришло время разбираться с метриками, начнем с DAU, WAU, MAU и sticky factor
1️⃣ Что это
DAU — уникальные пользователи за день
WAU — за 7 дней
MAU — за 30 дней
Ключевое слово — уникальные: один user_id считаем один раз, сколько бы раз он ни заходил.
2️⃣ Считаем все три одним запросом
SELECT
COUNT(DISTINCT CASE WHEN dt = CURRENT_DATE THEN user_id END) AS dau,
COUNT(DISTINCT CASE WHEN dt >= CURRENT_DATE - 6 THEN user_id END) AS wau,
COUNT(DISTINCT CASE WHEN dt >= CURRENT_DATE - 29 THEN user_id END) AS mau
FROM events;
COUNT(DISTINCT …) убирает повторы, CASE WHEN задаёт окно по дате.
3️⃣ Частая ошибка
WAU — это не сумма семи DAU. Кто заходил все 7 дней, в сумме DAU посчитан 7 раз, а в WAU — один.
Отсюда правило: DAU ≤ WAU ≤ MAU.
4️⃣ Sticky factor
sticky factor = DAU / MAU — показывает, как часто пользователи возвращаются.
0.1 → заходят ~3 дня в месяц (слабо)
0.2 → ~6 дней
0.5 → ~15 дней (уровень соцсетей)
Чем выше — тем «липче» продукт.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥21🔥16🐳7
This media is not supported in your browser
VIEW IN TELEGRAM
🎲 Формула Байеса и условная вероятность — разбор на кубике:
Условие: кинули кубик и говорят — выпало чётное. Какова вероятность, что это шестёрка?
Ответ: не 1/6, а 1/3. Покажу через формулу Байеса и расшифрую в ней каждое слагаемое — это и есть самое главное.
1️⃣ Обозначим события:
2️⃣ Сама формула Байеса:
3️⃣ Разбираем каждый кусок формулы:
4️⃣ Подставляем числа:
5️⃣ Почему получилось именно так:
Подсказка «чётное» выкинула варианты 1, 3, 5. Осталось 2, 4, 6 — и шестёрка одна из трёх. Формула дала ровно это: 1/3. Информация подняла шанс шестёрки с 1/6 до 1/3 — в этом вся суть Байеса.
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ А вы сразу сказали 1/3 или попались на 1/6? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие разборы.
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Условие: кинули кубик и говорят — выпало чётное. Какова вероятность, что это шестёрка?
Ответ: не 1/6, а 1/3. Покажу через формулу Байеса и расшифрую в ней каждое слагаемое — это и есть самое главное.
1️⃣ Обозначим события:
A — «выпала шестёрка» (это мы ищем)
B — «выпало чётное» (это уже известно — условие)
Нужна вероятность A, если известно B.
2️⃣ Сама формула Байеса:
P(A|B) = P(B|A) × P(A) / P(B)
Читается: вероятность A при условии, что произошло B.
3️⃣ Разбираем каждый кусок формулы:
• P(A|B) — что ищем: шанс шестёрки, раз выпало чётное. Это и есть ответ.
• P(A) — базовый шанс шестёрки, без подсказок = 1/6.
• P(B) — шанс чётного вообще: чётные это 2, 4, 6, то есть 3 из 6 = 1/2.
• P(B|A) — шанс, что чётное, ЕСЛИ выпала шестёрка = 1. Шестёрка всегда чётная.
4️⃣ Подставляем числа:
P(A|B) = P(B|A) × P(A) / P(B) = 1 × (1/6) / (1/2) = (1/6) / (1/2) = 1/3
5️⃣ Почему получилось именно так:
Подсказка «чётное» выкинула варианты 1, 3, 5. Осталось 2, 4, 6 — и шестёрка одна из трёх. Формула дала ровно это: 1/3. Информация подняла шанс шестёрки с 1/6 до 1/3 — в этом вся суть Байеса.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤🔥4🐳4
This media is not supported in your browser
VIEW IN TELEGRAM
💰 ARPU vs ARPPU — разберемся в чем разница:
ARPU и ARPPU постоянно путают. Обе про доход с пользователя, но делят на разное. Разберём и выведем главную формулу.
1️⃣ ARPU — доход на ВСЕХ
Всю выручку делим на всех активных, даже на тех, кто ничего не заплатил.
ARPU = выручка / все юзеры
2️⃣ ARPPU — доход на ПЛАТЯЩИХ
Та же выручка, но делим только на тех, у кого платёж больше нуля.
ARPPU = выручка / платящие
3️⃣ Связь — доля платящих
доля платящих = платящие / все юзеры = CR to pay (часто 1–5%)
Отсюда главное тождество:
ARPU = ARPPU × доля платящих
И всегда ARPPU >= ARPU.
4️⃣ Куда расти
Тождество показывает два рычага роста:
• поднять долю платящих — онбординг, триггеры оплаты
• поднять ARPPU — апселл, тарифы, допродажи
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Что еще разобрать? Пишите в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
ARPU и ARPPU постоянно путают. Обе про доход с пользователя, но делят на разное. Разберём и выведем главную формулу.
1️⃣ ARPU — доход на ВСЕХ
Всю выручку делим на всех активных, даже на тех, кто ничего не заплатил.
ARPU = выручка / все юзеры
SELECT
SUM(revenue) / COUNT(DISTINCT user_id) AS arpu
FROM payments;
2️⃣ ARPPU — доход на ПЛАТЯЩИХ
Та же выручка, но делим только на тех, у кого платёж больше нуля.
ARPPU = выручка / платящие
SELECT
SUM(revenue) / COUNT(DISTINCT CASE WHEN revenue > 0 THEN user_id END) AS arppu
FROM payments;
3️⃣ Связь — доля платящих
доля платящих = платящие / все юзеры = CR to pay (часто 1–5%)
Отсюда главное тождество:
ARPU = ARPPU × доля платящих
И всегда ARPPU >= ARPU.
4️⃣ Куда расти
Тождество показывает два рычага роста:
• поднять долю платящих — онбординг, триггеры оплаты
• поднять ARPPU — апселл, тарифы, допродажи
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16🐳7❤🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Ранее мы разобрали, как работает условная вероятность и формула Байеса.
Если пропустили, то вот сам пост.
Давайте разберем на эту тему популярную задачу, которую спрашиваю во многих компаниях.
Условие: болезнь встречается у 1% людей. Тест находит болезнь у больного в 99% случаев, а у здорового ошибочно кричит «+» в 5% случаев. Вам пришёл положительный результат. Какова вероятность, что вы действительно больны?
Почти все на автомате отвечают «99%». Правильный ответ — 16.7%. Разберём, почему.
1️⃣ Вопрос не тот, на который вы ответили:
В условии дано P(+ | болен) = 99% — «тест сработает, если человек болен».
А спрашивают P(болен | +) — «человек болен, если тест сработал».
Это разные вопросы, и цифры у них разные. Формула Байеса как раз переворачивает условную вероятность с одной стороны на другую.
2️⃣ Считаем по головам — 10 000 человек:
Забудем про проценты и посчитаем живых людей:
• больных: 1% от 10 000 = 100 человек
• здоровых: 9 900 человек
Прогоняем всех через тест:
• из 100 больных тест поймает 99% = 99 человек
• из 9 900 здоровых тест ошибочно испугает 5% = 495 человек
тест + тест − всего
болен 99 1 100
здоров 495 9405 9900
всего 594 9406 10000
Смотрим столбец «тест +»: плюс получили 594 человека, а больны из них только 99.
P(болен | +) = 99 / 594 = 1/6 ≈ 16.7%
3️⃣ Тот же ответ формулой Байеса:
Сначала выпишем всё, что даёт условие — новых чисел дальше не появится:
P(болен) = 0.01 — болезнь у 1% людей
P(здоров) = 0.99 — остальные 99%
P(+ | болен) = 0.99 — тест ловит больного
P(+ | здоров) = 0.05 — ошибка на здоровом
⚠️ Два разных числа выглядят одинаково: 0.99 — это и точность теста, и доля здоровых. Не перепутайте, кто где стоит.
Числитель — только больные с плюсом:
P(болен) × P(+|болен) = 0.01 × 0.99 = 0.0099 → это наши 99 человек
Знаменатель — почему он именно такой
Мы ищем долю: из всех, у кого плюс, сколько по-настоящему больны. Значит внизу должны стоять ВСЕ плюсы, а не только больные — иначе это будет не доля.
А плюс может прийти ровно из двух мест:
• тест поймал больного → 0.01 × 0.99 = 0.0099 → 99 человек
• тест ошибся на здоровом → 0.99 × 0.05 = 0.0495 → 495 человек
Третьего источника нет: человек либо болен, либо здоров, других вариантов не бывает. Поэтому знаменатель — сумма этих двух групп (это и есть формула полной вероятности):
P(+) = 0.0099 + 0.0495 = 0.0594 → 594 человека
Внутри каждой группы мы умножаем по одному правилу: «какая группа по размеру» × «какая доля в ней даёт плюс». Для здоровых это 0.99 × 0.05 — 99% людей здоровы, и 5% из них тест пугает зря.
Делим: 0.0099 / 0.0594 ≈ 0.167 = 16.7%
Ровно те же 99 и 594, что мы посчитали по головам. Формула ничего не выдумывает — она просто записывает подсчёт людей на языке вероятностей.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥11🔥11🐳4
This media is not supported in your browser
VIEW IN TELEGRAM
Условие: в мешке три кубика — на 6, 12 и 20 граней. Взяли один наугад, бросили — выпало 12. Бросаем этот же кубик ещё раз. Какова вероятность, что выпадет число меньше 12?
1️⃣ Что понятно сразу
6-гранный отпадает: числа 12 на нём просто нет. Значит в руке либо 12-гранный, либо 20-гранный.
2️⃣ Почему не 50 на 50
12 выпадает на этих кубиках по-разному: на 12-гранном — 1 раз из 12, на 20-гранном — 1 раз из 20. Раз у вас она выпала, вероятнее, что в руке именно 12-гранный.
3️⃣ Насколько именно чаще
Чтобы сравнить кубики честно, дадим каждому одинаковое число бросков. Возьмём 60 — оно делится и на 12, и на 20, поэтому получатся целые числа:
12-гранный: двенадцатка выпадет 60 : 12 = 5 раз
20-гранный: двенадцатка выпадет 60 : 20 = 3 раза
Итого 12-ть выпало 8 раз: пять раз с 12-гранного и три — с 20-гранного.
А если взять не 60 бросков, а другое число?
Ничего не изменится — важна только пропорция, а не сама цифра:
по 120 бросков → 10 и 6
по 600 бросков → 50 и 30
по 60 бросков → 5 и 3
Везде одно и то же: 12-гранный даёт 12-ать в 5 случаях из 8. Число 60 удобно только тем, что делится нацело: возьми 50 — вышло бы 4.17 и 2.5, та же пропорция.
При чём тут эти 8 случаев
По условию 12-ать уже выпало. Значит все броски, где выпало что-то другое, к вам не относятся — вы находитесь внутри тех самых 8 случаев. И в пяти из них у вас в руках 12-гранный кубик. Вот и всё, никакого 50 на 50.
4️⃣ Второй бросок
Считаем, как часто на каждом кубике выпадает меньше 12. Подходят числа от 1 до 11 — это 11 нужных граней:
на 12-гранном: 11 граней из 12 = 92%
на 20-гранном: 11 граней из 20 = 55%
Осталось соединить это с восемью случаями. В пяти из них у вас в руках 12-гранный и шанс 92%, в трёх — 20-гранный и шанс 55%. Считаем среднее по всем восьми, как среднюю оценку в классе:
(5 × 92% + 3 × 55%) / 8 ≈ 78%
5️⃣ Второй случай из тестового: выпало 4
Логика ровно та же, только теперь подходят все три кубика. Снова по 60 бросков каждым:
6-гранный: 60 : 6 = 10 четвёрок
12-гранный: 60 : 12 = 5
20-гранный: 60 : 20 = 3
всего 18 случаев
Меньше 4 — это 1, 2 и 3, то есть 3 нужные грани:
на 6-гранном: 3 из 6 = 50%
на 12-гранном: 3 из 12 = 25%
на 20-гранном: 3 из 20 = 15%
Среднее по восемнадцати случаям:
(10 × 50% + 5 × 25% + 3 × 15%) / 18 ≈ 37%
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21 6 6
This media is not supported in your browser
VIEW IN TELEGRAM
Условие: Три двери, за одной приз, за двумя пусто. Вы выбрали дверь 1. Ведущий открыл дверь 3 — там пусто — и предлагает поменять выбор на дверь 2. Стоит ли изменить выбор?
1️⃣ Ловушка
Дверей осталось две, приз за одной. Кажется, шансы равны — 50 на 50.
Это самый частый ответ и он неверный. Ошибка в том, что мы считаем оставшиеся двери одинаковыми. А они не одинаковые: одну выбрали вы наугад, вторую оставил ведущий, который знает расклад.
2️⃣ Деталь, на которой держится вся задача
Ведущий знает, где приз. И у него связаны руки:
— вашу дверь он не трогает
— дверь с призом он не открывает
Значит его ход не случаен. Он не «просто открыл пустую дверь» — он был обязан открыть именно пустую. И этим он сливает вам информацию
3️⃣ Перебор: три расклада, больше их не бывает
Ваш выбор — дверь 1. Приз может быть за любой из трёх дверей, и все три случая равновероятны. Просто пройдём их по очереди и посмотрим, что даёт СМЕНА выбора.
• Приз за дверью 1 (вы угадали сразу)
Ведущий открывает 2 или 3 — обе пустые. Меняете → попадаете на пустую. ✗ мимо
• Приз за дверью 2
Ваша дверь 1 пустая, дверь 3 пустая. Открыть 1 он не может (ваша), открыть 2 не может (там приз) — остаётся дверь 3. Меняете → берёте дверь 2 с призом. ✓ приз
• Приз за дверью 3
Зеркально: он обязан открыть 2. Меняете → берёте дверь 3 с призом. ✓ приз
Итого смена выигрывает в 2 случаях из 3.
4️⃣ Почему так получается
Посмотрите, когда смена проигрывает. Ровно в одном случае — если вы угадали приз с первого раза. А это 1 шанс из 3.
Дальше просто:
вы угадали сразу → 1/3 → смена проигрывает
вы не угадали → 2/3 → смена ВСЕГДА выигрывает
Во втором случае смена выигрывает не «иногда», а всегда: если ваша дверь пустая, то из двух оставшихся одна с призом, и пустую ведущий уже открыл за вас. Он своими руками сложил все ваши 2/3 в одну-единственную дверь.
Остаться: 1/3 (33%)
Поменять: 2/3 (67%)
Ваш первый выбор как был 1/3, так им и остался — ведущий про вашу дверь ничего не сообщил, он и не мог её открыть. Зато про две другие сообщил всё.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥12❤🔥8🐳7
This media is not supported in your browser
VIEW IN TELEGRAM
Разберём, откуда берутся дубли и почему порядок таблиц в join важен.
Условие: Две таблицы, связаны по ключу users.id = orders.user_id:
users
id name
1 Аня
2 Боря
3 Вика
orders
user_id sum
1 500
1 300
2 700
4 900
У Ани два заказа, у Бори один, у Вики заказов нет. А заказ на 900 — от юзера 4, которого в users нет.
1️⃣ INNER JOIN — только совпадения
Берём каждую строку слева и ищем ей пару справа. Нет пары — строки нет.
SELECT u.name, o.sum
FROM users u
JOIN orders o ON u.id = o.user_id;
Аня 500
Аня 300
Боря 700
Вика вылетела — у неё нет заказов. Заказ на 900 вылетел — у него нет юзера.
2️⃣ Откуда дубли
Аня в результате дважды. Строку слева никто не копировал — просто справа ей нашлось два совпадения:
1 строка × 2 совпадения = 2 строки.
Отсюда классическая ошибка: COUNT(*) после JOIN считает не юзеров, а пары. Считать надо COUNT(DISTINCT u.id).
3️⃣ LEFT JOIN — все слева
Оставляем каждую строку левой таблицы. Нет пары — правая часть заполняется NULL.
SELECT u.name, o.sum
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
Аня 500
Аня 300
Боря 700
Вика NULL -- осталась, но пустая
4️⃣ Порядок таблиц решает
Тот же LEFT JOIN, то же ON. Меняем только одно — какая таблица стоит слева:
SELECT u.name, o.sum
FROM orders o
LEFT JOIN users u ON o.user_id = u.id;
Аня 500
Аня 300
Боря 700
NULL 900 -- заказ без юзера остался
Вики больше нет. Бережём мы теперь orders, а не users.
u LEFT o ≠ o LEFT u.
5️⃣ RIGHT JOIN — то же, но без перестановки
RIGHT держит все строки правой таблицы:
SELECT u.name, o.sum
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;
Результат тот же, что в шаге 4: o LEFT u = u RIGHT o. RIGHT почти не пишут — переставить таблицы и оставить LEFT читается проще.
6️⃣ FULL OUTER JOIN — не теряем никого
Всё с обеих сторон, чего нет — NULL:
Аня 500
Аня 300
Боря 700
Вика NULL -- юзер без заказов
NULL 900 -- заказ без юзера
FULL = LEFT + RIGHT. Удобно для сверки двух источников: сразу видно пропуски с обеих сторон.
7️⃣ CROSS JOIN — каждая с каждой
Единственный джойн без ON. 2 юзера × 2 промокода = 4 строки:
SELECT u.name, p.code
FROM users u
CROSS JOIN promo p;
Аня SALE10
Аня SALE20
Боря SALE10
Боря SALE20
Это декартово произведение: N × M строк. Нужен редко — например, разложить каждого юзера по всем дням календаря.
8️⃣ Цепочка из трёх таблиц
users → orders → payments, всюду LEFT:
SELECT u.name, o.id AS order_id, p.sum AS paid
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
LEFT JOIN payments p ON p.order_id = o.id;
Аня 10 500
Боря 20 NULL
Вика NULL NULL
3 строки — все юзеры на месте.
9️⃣ Ловушка: стартовали не с той таблицы
Джойны те же, LEFT. Меняем только стартовую таблицу:
FROM payments p
LEFT JOIN orders o ON o.id = p.order_id
LEFT JOIN users u ON u.id = o.user_id;
Аня 10 500
Одна строка.
Боря и Вика в набор даже не попали — платежа-то у них нет, а LEFT бережёт только то, что уже слева.
Стартовая таблица задаёт максимум строк: дальше их можно только размножить или отфильтровать, но не добавить новых.
🔟 Ловушка: INNER после LEFT
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
JOIN payments p ON p.order_id = o.id; -- обычный JOIN = INNER
Аня 10 500
LEFT честно донёс Борю с NULL и Вику с NULL.
А следующий INNER выкинул все строки без пары
Шпаргалка:
INNER — только совпадения
LEFT — все слева + совпадения
RIGHT — все справа + совпадения
FULL — всё с обеих сторон
CROSS — каждая с каждой (N × M)
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥12❤🔥5 5
This media is not supported in your browser
VIEW IN TELEGRAM
P-value простыми словами:
Условие: подбросили монету 10 раз, выпало 9 орлов. Можно ли теперь говорить, что она подкручена?
1️⃣ Две версии Любая проверка начинается с двух гипотез:
H0 (нулевая) — эффекта нет. Монета честная, 50 на 50.
H1 (альтернативная) — эффект есть. Монету подкрутили.
В A/B-тесте ровно то же самое:
H0 — между вариантами разницы нет
H1 — разница есть. Нулевую гипотезу не доказывают, её пытаются опровергнуть.
2️⃣ Что вообще умеет честная монета:
Возьмём заведомо честную монету и бросим 10 раз. Получится какое-то число орлов. Повторим ещё и ещё — тысячу серий. Чаще всего выпадает 4, 5 или 6 орлов, реже 3 и 7. Это и есть распределение: не формула с неба, а результат повторения опыта.
3️⃣ Считаем точно:
Каждый бросок удваивает число раскладов:
1 бросок — 2 варианта,
2 броска — 4,
3 броска — 8.
Десять бросков дают 2¹⁰ = 1024 расклада, и у честной монеты все они выпадают одинаково часто. Сколько из них дают ровно 9 орлов? Столько, сколько мест у единственной решки:
Р О О О О О О О О О
О Р О О О О О О О О
О О Р О О О О О О О
... и так 10 штук — решка едет по всем местам
• 10 раскладов из 1024 — это 1%.
• Ровно 10 орлов — единственный расклад, 0.1%.
Шанс считается просто: сколько нужных раскладов делим на все 1024.
4️⃣ Откуда 2.15%
Нас интересует не «ровно 9», а «9 или ещё сильнее». Плюс зеркальный край: подкрутить монету могли и в сторону решки, 9 решек удивили бы нас так же.
Расклады:
9 орлов → 10 раскладов
10 орлов → 1 расклад
9 решек → 10 раскладов
10 решек → 1 расклад
Итого: 10 + 1 + 10 + 1 = 22 из 1024 = 2.15%
Вот эти 2.15% и называются p-value: как часто честная монета САМА, без всякой подкрутки, выдаёт такой же перекос или сильнее.
5️⃣ Порог Альфа:
Порог Альфа выбирают заранее, до теста. В бизнесе и A/B обычно 5%, в медицине 1% и строже.
2.15% < 5% → нулевую гипотезу отклоняем, монета скорее подкручена.
Сама альфа — это вероятность ошибки первого рода: эффекта нет, а мы его «нашли». С порогом 5% так будет выходить в 5 тестах из 100. Про ошибки первого и второго рода будет отдельный разбор.
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Как объяснили бы p-value за 30 секунд на собеседовании? Пишите свою формулировку в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие разборы серии про A/B.
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Условие: подбросили монету 10 раз, выпало 9 орлов. Можно ли теперь говорить, что она подкручена?
1️⃣ Две версии Любая проверка начинается с двух гипотез:
H0 (нулевая) — эффекта нет. Монета честная, 50 на 50.
H1 (альтернативная) — эффект есть. Монету подкрутили.
В A/B-тесте ровно то же самое:
H0 — между вариантами разницы нет
H1 — разница есть. Нулевую гипотезу не доказывают, её пытаются опровергнуть.
2️⃣ Что вообще умеет честная монета:
Возьмём заведомо честную монету и бросим 10 раз. Получится какое-то число орлов. Повторим ещё и ещё — тысячу серий. Чаще всего выпадает 4, 5 или 6 орлов, реже 3 и 7. Это и есть распределение: не формула с неба, а результат повторения опыта.
3️⃣ Считаем точно:
Каждый бросок удваивает число раскладов:
1 бросок — 2 варианта,
2 броска — 4,
3 броска — 8.
Десять бросков дают 2¹⁰ = 1024 расклада, и у честной монеты все они выпадают одинаково часто. Сколько из них дают ровно 9 орлов? Столько, сколько мест у единственной решки:
Р О О О О О О О О О
О Р О О О О О О О О
О О Р О О О О О О О
... и так 10 штук — решка едет по всем местам
• 10 раскладов из 1024 — это 1%.
• Ровно 10 орлов — единственный расклад, 0.1%.
Шанс считается просто: сколько нужных раскладов делим на все 1024.
4️⃣ Откуда 2.15%
Нас интересует не «ровно 9», а «9 или ещё сильнее». Плюс зеркальный край: подкрутить монету могли и в сторону решки, 9 решек удивили бы нас так же.
Расклады:
9 орлов → 10 раскладов
10 орлов → 1 расклад
9 решек → 10 раскладов
10 решек → 1 расклад
Итого: 10 + 1 + 10 + 1 = 22 из 1024 = 2.15%
Вот эти 2.15% и называются p-value: как часто честная монета САМА, без всякой подкрутки, выдаёт такой же перекос или сильнее.
5️⃣ Порог Альфа:
Порог Альфа выбирают заранее, до теста. В бизнесе и A/B обычно 5%, в медицине 1% и строже.
2.15% < 5% → нулевую гипотезу отклоняем, монета скорее подкручена.
Сама альфа — это вероятность ошибки первого рода: эффекта нет, а мы его «нашли». С порогом 5% так будет выходить в 5 тестах из 100. Про ошибки первого и второго рода будет отдельный разбор.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥15🔥8🐳3
🍂 Осень — сезон найма:
Каждый год одна и та же история — в сентябре рынок будто просыпается. И это не ощущение — этому есть вполне понятные причины.
🍁 Почему именно сейчас:
1️⃣ Все возвращаются из отпусков. Летом процесс встаёт на месяц: то нанимающий менеджер в отпуске, то тимлид, то HR.
2️⃣ Компании добивают бюджеты. Ставки на этот год уже утверждены, и если их не закрыть до декабря — деньги просто сгорят, а в следующем году их могут и не дать. Поэтому в Q4 нанимают активнее и торгуются охотнее.
3️⃣ Планы на следующий год пишутся сейчас. Под новые проекты набирают людей заранее.
😔 С какими проблемами встречаются кандидаты:
Я менторю и консультирую, и почти все спотыкаются об одно и то же:
🎯 Что с этим делать:
Всё это решается. Не магией, а разбором конкретно вашей ситуации: что в резюме мешает, как упаковать опыт, что говорить на собесе и какую цифру называть, когда спросят про зарплату.
🤝 Подробнее о том, с чем я могу помочь — https://clck.ru/3VeJu4
Приходите смело в личку (НАПИСТЬ В ЛИЧКУ) — расскажите свою ситуацию, вместе посмотрим, смогу я вам помочь или нет.
Каждый год одна и та же история — в сентябре рынок будто просыпается. И это не ощущение — этому есть вполне понятные причины.
🍁 Почему именно сейчас:
1️⃣ Все возвращаются из отпусков. Летом процесс встаёт на месяц: то нанимающий менеджер в отпуске, то тимлид, то HR.
2️⃣ Компании добивают бюджеты. Ставки на этот год уже утверждены, и если их не закрыть до декабря — деньги просто сгорят, а в следующем году их могут и не дать. Поэтому в Q4 нанимают активнее и торгуются охотнее.
3️⃣ Планы на следующий год пишутся сейчас. Под новые проекты набирают людей заранее.
😔 С какими проблемами встречаются кандидаты:
Я менторю и консультирую, и почти все спотыкаются об одно и то же:
• Резюме просто не открывают — оно не проходит по ключевым словам и теряется в поиске
• Резюме открыли, но оно не цепляет: написан список обязанностей вместо результатов в цифрах
• Не получается рассказать о себе за 2 минуты так, чтобы захотелось слушать дальше
• Опыт есть, а презентовать его не выходит: «ну, я строил дашборды и писал запросы»
• Не понимают свою стоимость на рынке и называют вилку ниже, чем готовы платить
• Боятся торговаться за оффер и соглашаются на первое же предложение
• Заваливают технические секции, хотя ровно то же самое делают на работе каждый день
• Не могут объяснить смену работы, паузу в опыте или переход из другой сферы
• Синдром самозванца: «мне рано на мидла», хотя по факту давно пора
• Готовятся хаотично — учат всё подряд вместо того, что реально спрашивают на собесах
🎯 Что с этим делать:
Всё это решается. Не магией, а разбором конкретно вашей ситуации: что в резюме мешает, как упаковать опыт, что говорить на собесе и какую цифру называть, когда спросят про зарплату.
Приходите смело в личку (НАПИСТЬ В ЛИЧКУ) — расскажите свою ситуацию, вместе посмотрим, смогу я вам помочь или нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6🔥6🐳5
🏠 IT ипотека (Часть 3) — Как я сэкономил на ремонте: кэшбэк, промокоды и один неочевидный лайфхак с Лемана Про:
Ремонт — это дорого. Но если подойти с умом, можно отбить приличную сумму. Делюсь тем, что реально сработало у меня.
🎚 Способ 1 — Кэшбэк в банках:
1️⃣ В Тинькофф (Т-банк), Альфа банк, Райффайзенбанк и других банках каждый месяц выбираем категорию кэшбэка — «Дом и ремонт», «Техника» и т.д.
2️⃣ Смотрим раздел «Партнёры» — там бывают спецусловия на конкретные магазины
3️⃣ Покупаем через партнёрские ссылки — кэшбэк приходит автоматически
🎚 Способ 2 — Best Benefits от работодателя:
Если у вас есть корпоративная программа льгот — обязательно загляните туда перед любой крупной покупкой. У меня там нашлись скидки на несколько магазинов.
🎚 Способ 3 — Лайфхак с Лемана Про (главный кейс):
Вот здесь интереснее. Собирал кухню — это дорого, поэтому копал все варианты.
Что нашёл:
• Карта Райффайзена — 5% кэшбэк на покупки в Лемана Про онлайн
• Но как купить «онлайн», если едешь в магазин и собираешь кухню физически?
Лайфхак: попросите менеджера выставить оплату ссылкой. Вы оплачиваете через ссылку → система засчитывает это как покупку на сайте → кэшбэк 5% прилетает.
Плюс к этому — скидка для новосёлов 10%:
• Нужно показать ДКП (договор купли-продажи)
• Дают 7 промокодов на разные категории: кухни, двери и т.д. • Промокоды суммируются с кэшбэком
Итого на кухне: -10% промокод + -5% Райффайзенбанк
🎚 Способ 4 — Промокоды на всё остальное:
Перед любой покупкой просто гуглите: «[название магазина] промокод». Есть целые сайты с актуальными кодами. Я так нашёл скидку на подписку REMPLANNER — то ли 5%, то ли 10%, но всё равно приятно. На Авито можно найти много интересного.
🔥 Набираем 70 реакций на этот пост, чтобы посты про IT ипотеку выходили быстрее
Итог:🤩
❓ А как вы экономите на ремонте и мебели? Жду ваших лайфхаков в комментариях — мне ещё предстоит покупка мебели, буду изучать!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Вопросы, менторство, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Ремонт — это дорого. Но если подойти с умом, можно отбить приличную сумму. Делюсь тем, что реально сработало у меня.
1️⃣ В Тинькофф (Т-банк), Альфа банк, Райффайзенбанк и других банках каждый месяц выбираем категорию кэшбэка — «Дом и ремонт», «Техника» и т.д.
2️⃣ Смотрим раздел «Партнёры» — там бывают спецусловия на конкретные магазины
3️⃣ Покупаем через партнёрские ссылки — кэшбэк приходит автоматически
Если у вас есть корпоративная программа льгот — обязательно загляните туда перед любой крупной покупкой. У меня там нашлись скидки на несколько магазинов.
Вот здесь интереснее. Собирал кухню — это дорого, поэтому копал все варианты.
Что нашёл:
• Карта Райффайзена — 5% кэшбэк на покупки в Лемана Про онлайн
• Но как купить «онлайн», если едешь в магазин и собираешь кухню физически?
Лайфхак: попросите менеджера выставить оплату ссылкой. Вы оплачиваете через ссылку → система засчитывает это как покупку на сайте → кэшбэк 5% прилетает.
Плюс к этому — скидка для новосёлов 10%:
• Нужно показать ДКП (договор купли-продажи)
• Дают 7 промокодов на разные категории: кухни, двери и т.д. • Промокоды суммируются с кэшбэком
Итого на кухне: -10% промокод + -5% Райффайзенбанк
Перед любой покупкой просто гуглите: «[название магазина] промокод». Есть целые сайты с актуальными кодами. Я так нашёл скидку на подписку REMPLANNER — то ли 5%, то ли 10%, но всё равно приятно. На Авито можно найти много интересного.
🔥 Набираем 70 реакций на этот пост, чтобы посты про IT ипотеку выходили быстрее
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥23🔥18 7🐳5
This media is not supported in your browser
VIEW IN TELEGRAM
🏦 Задача с собеса в Т-банк на SQL: вторая зарплата в отделе
Условие: есть таблица сотрудников — отдел, имя, зарплата. Найди вторую по величине зарплату в каждом отделе.
Все понимают, что тут нужна оконная функция.
Но какую именно взять: на одинаковых зарплатах три похожие функции дают три разных ответа.
1️⃣ Данные
Зарплаты в тысячах. У Ани и Бори одинаково, по 150 — вся задача про них.
2️⃣ Сначала уточни у интервьюера
«Вторая по величине» — это второй человек или второе значение зарплаты? В продажах второй человек получает 150, а второе значение — 120.
Обычно имеют в виду значение. Значит, правильный ответ:
Задать этот вопрос вслух — уже плюс на собесе.
3️⃣ Что делает оконная функция
GROUP BY схлопывает отдел в одну строку. Оконная функция оставляет все 7 строк и дописывает рядом номер внутри отдела.
PARTITION BY — нумеруем отдельно в каждом отделе. ORDER BY salary DESC — от большей зарплаты к меньшей. Фильтр по n стоит во внешнем запросе: оконные функции считаются после WHERE, поэтому в WHERE того же запроса n ещё не существует.
Осталось выбрать функцию.
4️⃣ ROW_NUMBER — мимо
Нумерует подряд, одинаковые или нет:
В продажах n = 2 у Бори, а у него 150 — это та же максимальная. Вдобавок кому из Ани и Бори достанется 1, база решает сама, и от запуска к запуску это может поменяться.
5️⃣ RANK — тоже мимо
Одинаковым даёт один номер, но следующий пропускает:
Номера 2 в продажах нет — отдел просто пропал из ответа.
6️⃣ DENSE_RANK — то, что нужно
Одинаковым даёт один номер и следующий не пропускает:
Продажи — 120, IT — 180. Ровно то, что искали.
7️⃣ Финальный запрос
Итог:🤩
На одинаковых зарплатах ROW_NUMBER берёт ту же максимальную, RANK теряет отдел, DENSE_RANK даёт правильный ответ.
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium
✔️ Подпишитесь на канал, чтобы не пропустить следующие разборы
🚬 Вопросы, обучение, консультации: Консультации
@dima_sqlit
Условие: есть таблица сотрудников — отдел, имя, зарплата. Найди вторую по величине зарплату в каждом отделе.
Все понимают, что тут нужна оконная функция.
Но какую именно взять: на одинаковых зарплатах три похожие функции дают три разных ответа.
1️⃣ Данные
dept name salary
продажи Аня 150
продажи Боря 150
продажи Вика 120
продажи Гоша 100
IT Дима 200
IT Ева 180
IT Женя 160
Зарплаты в тысячах. У Ани и Бори одинаково, по 150 — вся задача про них.
2️⃣ Сначала уточни у интервьюера
«Вторая по величине» — это второй человек или второе значение зарплаты? В продажах второй человек получает 150, а второе значение — 120.
Обычно имеют в виду значение. Значит, правильный ответ:
продажи 120
IT 180
Задать этот вопрос вслух — уже плюс на собесе.
3️⃣ Что делает оконная функция
GROUP BY схлопывает отдел в одну строку. Оконная функция оставляет все 7 строк и дописывает рядом номер внутри отдела.
WITH r AS (
SELECT *,
ФУНКЦИЯ() OVER (
PARTITION BY dept
ORDER BY salary DESC
) AS n
FROM employees
)
SELECT dept, name, salary
FROM r WHERE n = 2;
PARTITION BY — нумеруем отдельно в каждом отделе. ORDER BY salary DESC — от большей зарплаты к меньшей. Фильтр по n стоит во внешнем запросе: оконные функции считаются после WHERE, поэтому в WHERE того же запроса n ещё не существует.
Осталось выбрать функцию.
4️⃣ ROW_NUMBER — мимо
Нумерует подряд, одинаковые или нет:
Аня 150 1
Боря 150 2 ← n = 2
Вика 120 3
Гоша 100 4
В продажах n = 2 у Бори, а у него 150 — это та же максимальная. Вдобавок кому из Ани и Бори достанется 1, база решает сама, и от запуска к запуску это может поменяться.
5️⃣ RANK — тоже мимо
Одинаковым даёт один номер, но следующий пропускает:
Аня 150 1
Боря 150 1
Вика 120 3 ← номер 2 пропущен
Гоша 100 4
Номера 2 в продажах нет — отдел просто пропал из ответа.
6️⃣ DENSE_RANK — то, что нужно
Одинаковым даёт один номер и следующий не пропускает:
Аня 150 1
Боря 150 1
Вика 120 2 ← n = 2
Гоша 100 3
Продажи — 120, IT — 180. Ровно то, что искали.
7️⃣ Финальный запрос
WITH r AS (
SELECT *,
DENSE_RANK() OVER (
PARTITION BY dept
ORDER BY salary DESC
) AS n
FROM employees
)
SELECT dept, name, salary
FROM r WHERE n = 2;
-- продажи 120, IT 180
Итог:
На одинаковых зарплатах ROW_NUMBER берёт ту же максимальную, RANK теряет отдел, DENSE_RANK даёт правильный ответ.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16 8❤🔥5
Media is too big
VIEW IN TELEGRAM
🧠 Уровень абстракции — навык, который сэкономит вам годы учёбы:
Когда я начинал изучать Python, я был одержим деталями.
• Почему в pandas
• Как устроена библиотека изнутри?
Я тратил часы, чтобы докопаться до сути — и в итоге потерял много времени. Потом я понял кое-что важное.
🌟 Каждый разработчик написал библиотеку так, как он сам это видит:
☺️ Представьте, если бы перед тем как сесть за руль, нужно было изучить:
• Принцип работы коробки передач, осевой части и мотора. Сколько людей вообще водили бы машины?
• Так же и с Python, SQL, библиотеками — вам не обязательно знать, как это устроено, чтобы это использовать. Конечно, если вы заглянете «под капот» — будете использовать инструмент эффективнее. Но это уже следующий уровень, и до него вы дойдёте сами, когда будет нужда.
Ключевой навык — уметь отделять важное от второстепенного.
А в текущее время, когда информация генерируется с невероятной скоростью этот навык становиться только актуальнее.
🤯 Это пост вам на подумать
❓ Замечали за собой привычку закапываться в детали там, где это не нужно? Делитесь в комментариях!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Вопросы, обучение, консультации: Консультации
@dima_sqlit
Когда я начинал изучать Python, я был одержим деталями.
• Почему в pandas
shape — это атрибут, а не метод shape()?• Как устроена библиотека изнутри?
Я тратил часы, чтобы докопаться до сути — и в итоге потерял много времени. Потом я понял кое-что важное.
shape — атрибут, потому что автор решил, что так логичнее. Это его архитектурное решение. Моё дело — принять это и пользоваться инструментом. Именно здесь стоит поговорить про абстракцию.• Принцип работы коробки передач, осевой части и мотора. Сколько людей вообще водили бы машины?
• Так же и с Python, SQL, библиотеками — вам не обязательно знать, как это устроено, чтобы это использовать. Конечно, если вы заглянете «под капот» — будете использовать инструмент эффективнее. Но это уже следующий уровень, и до него вы дойдёте сами, когда будет нужда.
Ключевой навык — уметь отделять важное от второстепенного.
А в текущее время, когда информация генерируется с невероятной скоростью этот навык становиться только актуальнее.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥13🔥7 4
Что сейчас стоит изучать Аналитику — чтобы перейти в DS/ML ?
Замечаю общий тренд на изучение DS/ML.
И для тех, кто хочет разобраться во всех этих бустингах, пресижн и реколл, советую заглянуть в канал @asisakov_channel и прочитать тот самый роудмап по вкатыванию в Data Science.
Автора канала Александр крутой AI-LEAD в Аналитике Яндекс Лавки🛒
Что рекомендую почитать на канале:
1. Грандиозная подборка по собесам
2. Как заботать SQL?
3. Как понять теорвер?
4. Как упороться в статистику?
5. Как заботать математику для Data Science?
6. Как развиваться в карьере без выгорания?
7. Что важно знать о поступлении и карьере ещё в школе?
Подборки очень объемные и полезные — можно буквально собрать себе программу обучения из постов канала 💪
Ну и помимо хардового контента есть задачи и мемы, так что всё как мы любим.
Подписывайся, чтобы не потерять @asisakov_channel👇
Замечаю общий тренд на изучение DS/ML.
И для тех, кто хочет разобраться во всех этих бустингах, пресижн и реколл, советую заглянуть в канал @asisakov_channel и прочитать тот самый роудмап по вкатыванию в Data Science.
Автора канала Александр крутой AI-LEAD в Аналитике Яндекс Лавки
Что рекомендую почитать на канале:
1. Грандиозная подборка по собесам
2. Как заботать SQL?
3. Как понять теорвер?
4. Как упороться в статистику?
5. Как заботать математику для Data Science?
6. Как развиваться в карьере без выгорания?
7. Что важно знать о поступлении и карьере ещё в школе?
Подборки очень объемные и полезные — можно буквально собрать себе программу обучения из постов канала 💪
Ну и помимо хардового контента есть задачи и мемы, так что всё как мы любим.
Подписывайся, чтобы не потерять @asisakov_channel
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤🔥3 3