tgindex
NULL++
@nullppрусский

Канал для тех, кто хочет развиваться как Data Analyst, Data Engineer, BI-Analyst или Data Scientist @HexMikhail

Последний пост
11 авг.
Последнее чтение
12 авг.
Постов за неделю
1
Всего постов
24
Тип
открытый
Язык
русский
В каталоге с
12 авг.
Подписчики
159
+2 за 4 дн.
Сутки
0
0,00%
Неделя
 
Месяц
 
Просмотров на пост
132
24 постов
Вовлечённость
83,0%
к подписчикам
Постов в день
0,1
всего 24
Упоминаний
0
каналов
Охват размещения
оценка
1/24сутки в ленте
49
1/48двое суток
56
1/72трое суток
60

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • Привет, аналитики! Сегодня хочу поговорить об одном вопросе, который любят задавать на собеседованиях. Чем отличаются DROP, DELETE и TRUNCATE? Начну с того, что все три команды так или иначе удаляют данные 😁 Но фишка в том, что делают это они по-разному. Поэтому простого ответа "все они удаляют данные" на этот вопрос недостаточно. Давайте разбираться! 1. DELETE — удаляет строки в таблице DELETE FROM users Есть возможность удалять строки по условию, то есть конкретные записи. Например, пользователей с пустым e-mail. DELETE FROM users WHERE email IS NULL Особенности: - Удаление происходит построчно. Да и удалением это назвать не совсем правильно. Строки помечаются как удалённые, но всё равно некоторое время хранятся в таблице. Кстати, при вставке строк INSERT СУБД старается сначала заполнить именно вот такие помеченные строки. - Не освобождает занимаемое место в БД. - Если внутри транзакции, то результат можно откатить через ROLLBACK. - Можно удалить не всё, а лишь определённые строки, использовав WHERE. - Не сбрасывает автоинкремент, если он есть в таблице. - Работает медленно (особенно на больших таблицах), ведь нужно пробежаться по каждой строке, пометить её "удалённой" 2. TRUNCATE — очищает таблицу полностью, сохраняя лишь её структуру (название и типы полей, связи, ограничения и т.д.). Например, почистить таблицу, где хранятся логи: TRUNCATE TABLE logs Особенности: - Удаляет все строки разом. - Нельзя использовать WHERE. - В большинстве СУБД нельзя откатить. - Сбрасывает счётчик автоинкремента. - Работает быстро. - В большинстве СУБД автоматически освобождает место. 3. DROP — удаляет саму таблицу (или базу данных) вместе со структурой. DROP TABLE temp_table Особенности: - Удаляет структуру таблицы. - Нельзя откатить - Удаляет индексы, триггеры, ограничения - всё, что связано с таблицей. - Освобождает место полностью. Поэтому запоминаем раз и на всегда: DELETE — скальпель, удаляем выборочно. TRUNCATE — лопата, вычищаем всё содержимое, оставляя коробку. DROP — бульдозер, сносим коробку вместе с содержимым. P.S. В ClickHouse, например, TRUNCATE работает моментально, даже на терабайтных таблицах. Потому что там нет транзакций в классическом понимании. Надеюсь, теперь на собеседовании этот вопрос не застанет тебя врасплох 😄 Забирай в заметки и ставь 🔥, если полезно! Попадался такой вопрос на собесе? Или может случайно что-то не то удалял? 😂 Пиши в комментах @nullpp #sql #вопрос #собеседование

  • видео или голосовое, без подписи

  • Привет, аналитики! Знаете, когда находишь интересный пост, то сохраняешь его в Избранное, чтобы потом почитать? Мне кажется все так делают. Сохранили и забыли, да?) Разбирал свои закладки в Избранном и наткнулся на давний пост с бесплатным курсом по основам Python на Stepik. Курс называется "Поколение Python". Заглянул по ссылкам - опа! Последнее обновление курса 05.08.2026) Да и отзывы у курса крайне положительные у первой части курса: 5 звёзд из 5 по более чем 25к отзывам! Глянул мельком программу и могу сказать, что это прям основа основ языка. Для кого этот курс написано в нём самом. Данный пост не является рекламой, если что) https://stepik.org/course/58852 - курс для начинающих https://stepik.org/course/68343 - курс для продвинутых Если интересно, то ставь 🔥, чтобы я ещё поковырялся в своём Избранном и может ещё чего интересного нашёл) @nullpp #обучение #python #stepik

  • Привет, аналитики! Первая рабочая неделя после отпуска заканчивается, и я обещал немного рассказать про свою поездку в Калининград. Я побывал во многих музеях города, но хочу рассказать о двух, которые прям врезались в моё сердечко и навсегда останутся у меня…

  • 3 авг.9410из simulative_official

    💻💻💻💻💻 Аналитик данных: кто это и почему ему важно знать SQL Привет! На связи Евгений Буторин, ментор интенсива по SQL 👋🏻 Вам хочется попробовать себя в аналитике, но непонятно, кто такой аналитик на самом деле, что нужно уметь на старте и почему все вокруг твердят именно про SQL? Приходите на мой вебинар — разберём это на реальных примерах и задачах. Разберём: ➖ Кто такой аналитик данных и чем он занимается каждый день на конкретных задачах; ➖ Какие навыки нужны на старте и куда расти дальше — от первого джуна до руководителя отдела; ➖ Порешаем пару реальных SQL-задач вместе и разберём, почему без SQL в аналитике никуда. 🔥 А ещё к нам в гости придёт Михаил Колчар — выпускник Симулейтив, который в 37 лет ушёл из сисадминов в аналитику данных и получил оффер после обучения. Он расскажет свою историю и ответит на любые вопросы прямо в чате! Если присматриваетесь к аналитике или хотите понять, с чего начать, приходите! 📆 4 августа, 19:00 МСК, онлайн ➡️ Ставьте напоминание в календарь, чтобы не забыть! 📈 Симулейтив | 📱 ВК | 📱 YouTube | 📱 Канал о DS

  • Привет, аналитики! Уже больше года прошло с тех пор, как я сменил профессию и устроился работать аналитиком данных. Переобучение давно закончено, дипломы получены. Но я продолжаю посещать различные учебные мероприятия. Почему? В этом посте я попробую объяснить то, что давно вертится у меня в голове, но я не мог подобрать слов, чтобы это описать. По первому диплому я учитель математики и информатики. И я 8+ лет практиковался в этом направлении :) Так вот, в постсоветской педагогике есть такая концепция — ЗУН (знания-умения-навыки), которая сейчас активно применяется в современном образовании. Хорошая или плохая эта концепция — это отдельный длинный разговор. Концепция делит обучение на три этапа: - Что-то узнать теоретически (лекция / параграф в учебнике). - Посмотреть, как теория работает на практике, отработать, закрепить (решение однотипных задач / практика). - Проверить, как усвоились знания (контрольные / тесты / лабораторная работа). У этого подхода есть один большущий минус: в человека пытаются вложить весь объём современных сведений о мире. Но когда я всерьёз занялся самообучением, я понял, что этого метода недостаточно, чтобы развиваться как профессионал. Я пришёл к выводу, что все знания, которые мы получаем, можно разделить на два типа. Первый тип — «тяжёлые» знания. Когда ты садишься и целенаправленно учишься: читаешь теорию, статьи, документацию (или смотришь видео об этом). Затем решаешь задачки, пишешь код, ошибаешься, переписываешь, доводишь до ума — как раз тот самый метод ЗУН. Другими словами - это задачи, которые нужно решать самому. Они прокачивают тебя напрямую. Берёшь реальную проблему, ищешь вариант, исправляешь его — и это остаётся с тобой навсегда. В этом случае ты не забудешь синтаксис, потому что сам три часа мучился с ним в боевом режиме. А есть второй — «лёгкие» знания. Это когда ты просто где-то услышал, увидел, краем уха зацепился. Такой тип называют «насмотренностью» или «наслушенностью». Это задачи, которые достаточно один раз увидеть, как решает кто-то другой. И ты не запоминаешь каждую строчку кода. Ты запоминаешь паттерн, подход, идею: «А так вообще можно было?» И через месяц, когда встречаешь похожую ситуацию, в голове всплывает: «Я где-то это видел, там было примерно так, надо попробовать». И вот второго типа мне как раз и не хватало долгое время. Я понял, что эта наслушенность / насмотренность — она бесценна. Невозможно знать всё. Но можно наслушать про многое. И когда приходит задача, которую ты никогда не решал, мозг достаёт из закромов ту самую случайную фразу с вебинара, конференции или подкаста. И ты уже знаешь, в какую сторону копать. Это, конечно, палка о двух концах. Ты помнишь, что на вебинаре крутой спикер советовал использовать определённый инструмент или подход. Ты внедряешь его в свой проект. А через время понимаешь: он тяжёлый, медленный, да и вообще, как потом оказывается, для других задач. Почему так вышло? Потому что ты слышал идею решения, но не слышал контекст: для каких данных, для какой нагрузки, для какой команды. А без контекста — это просто красивые слова. Но всё это откладывается, и однажды выручает. Но всегда надо держать в голове, что наслушанность создаёт иллюзию простоты. Особенно опасную для новичков. Наслушанность — это про навигацию, а не про карту. Она показывает направление, но не прокладывает маршрут. Знания — это сила. Но только когда ты знаешь, где и как их применить. А наслушанность — это мощный инструмент. Но с ним нужно обращаться аккуратно. А у вас был случай, когда случайное знание помогло решить задачу или спасло проект? Делитесь в комментариях, интересно почитать! @nullpp #размышления #теория #практика #задачи #работа #профессия

  • Привет, аналитики! Напоминаю, что я продолжаю потихоньку учиться в сторону ML 😏 И я столкнулся с задачей: построить рекомендательную систему для интернет-магазина. Саму задачу и моё решение, кому интересно, можно глянуть тут: vk.cc/cZLJI3 Но я хочу рассказать не об этом. Чтобы немного сэкономить время оформления репозитория, я закинул все файлы (включая мой ноутбук ipynb) в deepseek и попросил написать readme.md. Совсем немного его потом подправил, и вышло довольно-таки неплохо, я считаю 😊 Фактически, дипсик вытащил всё, что я бы и сам написал в описании. Но была надоедливая проблема — постоянно "ломался" формат md. Я полагаю, это из-за сочетания символов ```. Пришлось по частям копировать и самому доделывать/компоновать 😔 Кто-нибудь знает как побороть такое? Или это проблема бесплатной версии дипсика? P.S. Думаю, такой проект будет не стыдно и в портфолио закинуть. Напомню, оно тут: mishandri.github.io @nullpp #нейросети #github #портфолио #deepseek #ml #machinelearning

  • Привет, аналитики! Первая рабочая неделя после отпуска заканчивается, и я обещал немного рассказать про свою поездку в Калининград. Я побывал во многих музеях города, но хочу рассказать о двух, которые прям врезались в моё сердечко и навсегда останутся у меня в памяти. Сегодняшний пост о Музее ретро-игр "Бит и Пиксель". Я попал туда случайно. Мы просто гуляли и я решил посмотреть на картах, что находится поблизости. Несмотря на то, что сам музей находится на задворках и имеет не очень презентабельный вид — мне очень понравилось =) Ведь я очень люблю игры и приставки, особенно ретро =) В музее есть возможность поиграть в игры на NES, Sega MD, Sega Dreamcast, PS1, PS2, PS3, PS4, Xbox360 и много чего ещё. А главное — детям тоже понравилось! С удовольствием показал детям и вместе с ними поиграл в легендарные Quake III и CS1.6. Аутентичность на 146%: "пузатые" мониторы, клавиатуры с заедающим пробелом (ну у меня такая была) и даже мышки были с шариком) Приставки тоже подключены к ЭЛТ-телекам, стульчики и кресла из 90х, на полу лежат ковры — почти домашняя ностальгическая обстановка из моего детства. В общем, эмоции меня переполняли, я и дети не хотели уходить оттуда. И знаете, я поймал себя на мысли: в нашей работе мы постоянно оптимизируем запросы, ускоряем дашборды, считаем миллисекунды. А тут — приходишь, садишься за компьютер с 256 МБ оперативки, и игра может запускаться пару минут. И ты получаешь кайф! Технологии ушли вперёд, но дух тех лет — он навсегда. Все фотки в комментариях! (из-за ограничения ТГ) А у вас были походы в такие места? Или, может, дома сохранилась старая приставка? @nullpp #калиниград #музей #ретро #игры

  • Привет, аналитики! Небольшой короткий запланированный пост, пока я еду без связи в поезде :) Сегодня у меня профессиональный день рождения! 🎉 Ровно год назад был мой первый рабочий день в качестве BI-аналитика. Это был очень интересный и даже увлекательный год — я узнал очень много всего, получил очень ценный практический опыт как в BI, так и в самой аналитике данных и дата-инженерии. Временами было сложно, иногда хотелось всё бросить и уехать смотрителем маяка, чтобы меня никто не нашёл 😁 Но каждый раз, когда дашборд собирался, а цифры сходились — появлялся тот самый огонёк. Какие планы у меня на следующий профессиональный год? Ну... - Надо научиться дизайнить, проводить A/B-тесты, а также правильно и качественно оценивать их результаты. - Хочется ещё больше углубиться в ML, особенно в рекомендательные системы. - И, конечно же, продолжать делиться тут всем этим с вами! А какой был у вас самый запоминающийся профессиональный момент за последний год? Делитесь в комментариях! @nullpp #работа #профессия

  • Привет, аналитики! Интересно, куда я опять пропал? 🤔 А я устроил себе небольшой отпуск в Калининграде. Посмотрел на старинную архитектуру, побывал во многих музеях, да и просто гулял по городу во всех возможных направлениях. Большую часть времени я провёл в самом Калининграде, но также съездили в Зеленоградск — город котиков. Не повезло немного с погодой — попали в самый шторм (который сейчас в Москве, а затем по прогнозам направится в мой родной Архангельск). В Зеленоградске, конечно, совсем всё серьёзно было, а в Калининграде - очень сильный ветер и 12-13 градусов на улице. Но я человек северный — я не замёрз 😁 Что могу ещё сказать: Калининградская область — это очень атмосферно. Будто смесь Европы, советского наследия и морского бриза. Советую обязательно посетить, если ещё не бывали тут. Вообще, в нормальном отпуске не был целый год и очень устал за это время. Но вроде получилось отдохнуть от рутины, и сегодня я отправляюсь в обратный путь. Поездом. Люблю путешествовать поездом, несмотря на то, что обычно от дома до места отдыха поездка занимает около 2х дней. Это мой отдельный вид "медитации". Особенно когда мобильный интернет исчезает часов на 7 (когда едешь по Архангельской области). Читаешь книги, смотришь заранее скаченные сериальчики, спишь — красота! Ах да, ещё есть много времени на "подумать". А вы уже в этом году ездили в отпуск? П.С.: Хотите немного фоток? Тогда ставь 🔥 и я напишу пару постов о том, где побывал и что видел. @nullpp #отпуск #калининград #зеленоградск

  • Привет, аналитики! Всю эту неделю я проходил интенсив по A/B-тестированию от ШАД Яндекса. Начну с главного: мне, как "дилетанту" в A/B-тестах, не зашло. При этом, в чатах участников я видел сплошной положительный отклик и "вау-эффект". Почему? Наверное, я ожидал немного другого. Давайте по фактам. Что было круто (да, плюсы тоже есть): + Глубокое погружение в матстат (хотя в этом есть и минус, напишу дальше об этом), но фундамент дают мощный. + Спикер реально работает с A/B-тестами на данных Яндекс.Такси - это не абстрактные апельсинки и котики, а настоящий продакшн. Было множество примеров из работы спикера. + Много вычислений и визуализаций на питоне. Код пишут, показывают, графики строят - глаз радуется. А теперь минусы: - Несмотря на крутой бэкграунд спикера, большинство примеров исследований были синтетическими и далекими от жизни. - Математический оверскилл. Я понимаю, что это ШАД! Но иногда казалось что это лекция для аспирантов математического факультета. Много абстракций, за которыми я терял всякий смысл (учтём факт, что я много лет отдал матфаку, хоть это было и очень давно) - Хромает педагогический подход. Между некоторыми темами переход резкий, и мостики понимания в принципе отсутствуют. - Питона то много, но всё написано только "с нуля" как и показано в формулах до этого. Очень мало использований уже готовых библиотек и функций. И тут у меня главный вопрос к сообществу (и к ребятам из Яндекса, если вдруг они это прочитают): Неужели вы в реальной работе для каждой статистики пишете велосипеды с нуля? Как итог: Интенсив скорее для математиков, которые хотят пощупать прикладную область, чем для аналитиков, которые хотят прокачать скилл в продакшене. Есть у кого ещё какие интересные бесплатные курсы по A/B-тестированиям? Кстати, вот ссылка на этот интенсив: https://shad.yandex.ru/abweek #ABтестирование #ШАД #Яндекс #Аналитика #Обучение @nullpp

  • Привет, аналитики! С новой работы прислали/подарили книгу "Доверительное A/B-тестирование". Сходил сейчас, забрал из доставки. Сказали, что в ближайшее время она мне очень пригодится 😁 Чтож, будем её внимательно изучать #книги #абтесты #абтестировние @nullpp

  • Привет, аналитики! Сегодня разбираю ещё одну крутую фишку ClickHouse, с которой сталкивался далеко не каждый. Речь про ANTI JOIN. И он делает ровно противоположное тому, к чему мы привыкли. Простыми словами: Обычный JOIN находит совпадения между таблицами. А ANTI JOIN находит НЕСОВПАДЕНИЯ. Отличный пример: -- Найти пользователей, у которых НЕ БЫЛО заказов SELECT u.* FROM users u ANTI LEFT JOIN orders o ON u.id = o.user_id; Согласитесь - читается как обычная фраза на русском: "дай пользователей, к которым не присоединилось ни одного заказа". Как это работало бы без ANTI JOIN? Через NOT EXISTS или LEFT JOIN + WHERE right.id IS NULL: -- Классический способ (работает везде) SELECT u.* FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE o.id IS NULL; -- ClickHouse способ (короче и понятнее) SELECT u.* FROM users u ANTI LEFT JOIN orders o ON u.id = o.user_id; Разница в читаемости и иногда в производительности. Вот ещё несколько примеров: -- 1. Курсы без единого студента SELECT c.id, c.name FROM courses c ANTI LEFT JOIN enrollments e ON c.id = e.course_id; -- 2. Менторы, которые пока не проверили ни одной работы SELECT m.id, m.name FROM mentors m ANTI LEFT JOIN reviews r ON m.id = r.mentor_id; -- 3. Товары, которые ни разу не покупали SELECT p.id, p.name FROM products p ANTI LEFT JOIN sales s ON p.id = s.product_id; -- 4. Пользователи без сессий за последний месяц SELECT u.id, u.email FROM users u ANTI LEFT JOIN sessions s ON u.id = s.user_id AND s.date >= '2025-06-01'; Важный нюанс: ANTI LEFT JOIN (как и рассмотренный до этого SEMI JOIN) не добавляет колонки из правой таблицы - только фильтрует левую. -- Так НЕ сработает (правой колонки в результате не будет) SELECT u.*, o.amount FROM users u LEFT ANTI JOIN orders o ON u.id = o.user_id; -- ошибка: column o.amount not found Когда использовать вместо NOT EXISTS: 1. Маленькие таблицы - без разницы, оба варианта хороши 2. Большие данные + простой фильтр - ANTI JOIN часто быстрее 3. Сложные условия в подзапросе - NOT EXISTS может быть удобнее 4. ClickHouse + миллиарды строк - однозначно ANTI JOIN Короткий алгоритм для себя: Нужно найти то, чего НЕТ в другой таблице? → ANTI JOIN Запомнить легко: ANTI = противоположность INNER. Если INNER оставляет только совпавшие строки, то ANTI оставляет только НЕ совпавшие. Полезно? Забирай в заметки и жми 🔥 @nullpp #полезное #ClickHouse

  • Привет, аналитики! Сегодня без лирики, сразу к делу. Хочу рассказать про одну годную штуку в ClickHouse. Все мы без сомнений любим LEFT JOIN, но всегда есть нюанс: если справа несколько строк — получишь дублирование строк из левой таблицы + соответствующие…

  • Привет, аналитики! Сегодня без лирики, сразу к делу. Хочу рассказать про одну годную штуку в ClickHouse. Все мы без сомнений любим LEFT JOIN, но всегда есть нюанс: если справа несколько строк — получишь дублирование строк из левой таблицы + соответствующие значения из правой. Классика, всё работает так, как и должно. Но при таком соединении соответствия ищутся и ищутся, пока поиск не дойдёт до конца правой таблицы. А что делать, если я точно уверен, что правая таблица - это справочник, где только уникальные строки? Или мне не нужны все совпадения, а нужно только одно совпадение? В таких случаях можно использовать LEFT ANY JOIN. -- Обычный LEFT JOIN (найдёт все совпадения) SELECT t1.id, t2.value FROM left_table AS t1 LEFT JOIN right_table AS t2 ON t1.id = t2.id; -- ANY LEFT JOIN (возьмёт ПЕРВОЕ попавшееся значение) SELECT t1.id, t2.value FROM left_table AS t1 LEFT ANY JOIN right_table AS t2 ON t1.id = t2.id; Разница колоссальная: LEFT JOIN → 3 строки, если справа 3 записи с одним id. LEFT ANY JOIN → 1 строка на каждый ключ. Берётся первое значение (не детерминировано, нужно быть очень аккуратным, зависит от порядка чтения данных: сортировка на диске, партиции, ORDER BY в запросе, движок таблицы). Или вот ещё пример: SELECT m.name, g.genre FROM movies AS m LEFT ANY JOIN genres AS g ON m.id = g.movie_id; В этом примере для каждой строки из таблицы movies выбирается первая найденная совпадающая строка из таблицы genres. Где полезно? - Быстрые джойны на миллионах строк - Когда тебе всё равно, какое значение подтянется (первые попавшиеся метаданные, например) То есть, LEFT ANY JOIN может быть полезен в сценариях, где точное совпадение не критично, а цель - быстро получить данные без обработки нескольких совпадений. А ещё есть: - LEFT SEMI JOIN - LEFT ANTI JOIN - LEFT ASOF JOIN О них я напишу в следующих постах Ну как, полезно? Забирай в заметки и жми 🔥

  • 5 июн.154142

    Привет, аналитики! Первая рабочая неделя на новой работе позади. Ура! Итак... Я устроился в компанию Excite Kit (https://uxrocket.ru/about). Сейчас (на испытательный период) я занимаюсь отчётностью для одного крупного клиента. У них большой переезд из Oracle в ClickHouse (этим занимаюсь не я) и из OracleBI в DataLens (а вот этим как раз занимаюсь я). Более 50 различных отчётов нужно превратить в удобоваримый дашборд (а может и не один). Часть отчётов нужно перенести как есть, а другую часть они будут менять и сейчас формируют для этого ТЗ. Некоторые таблицы там 150+ млн строк. А отчёты содержат джоины по 5-6 таблиц сразу... Вот и надо как-то это ещё и оптимизировать, потому что у DataLens тоже есть свои ограничения как по количеству строк, так и по выделяемой для этого памяти. @nullpp #работа

  • 1 июн.183131

    Привет, аналитики! Ну что ж, пришло время рассказать, что я сегодня работал последний день в Денвик-аналитика, и с завтрашнего для приступаю к работе в другой компании (пока секрет в какой). Сейчас не об этом. За последний месяц я прошёл несколько собесов с HR, пару собесов с директорами и получил один офер. Если подумать, то от первых кликов на hh до офера прошло около 1,5 месяцев. У меня в конце мая планировался небольшой отпуск ко дню рождения, но из-за увольнения, я пошёл навстречу бывшему начальству и отозвал его, чтобы "остаться в хороших отношениях" и закончить текущие проекты. На текущий момент, я понял, что сделал это зря =) В спешном порядке пахал как не в себя, чтобы "не подвести". И... Никакого профита я с этого не поимел, не смотря на то, что закончил все три проекта, которые были у меня в работе в срок и, некоторые, даже раньше на несколько недель. Премию за них мне не начислили, и не начислят. То есть двойной (или даже тройной) профит поимела только компания. Ну что ж? Урок мне на будущее - сразу обговаривать окончательные условия при увольнении =) Спасибо, так сказать, за опыт. Мишезаменителя нашли очень быстро. Ну а почему бы и нет? Количество откликов на вакансии джуна исчисляются сотнями и доходят до тысячи и выше. Насколько мне стало известно, он уже в этот четверг выходит на работу. Ну что ж, удачи ему на этом пути😁 А мне ни пуха, ни пера на новом месте, про которое я расскажу в следующем посте! @nullpp #работа #hr #увольнение

  • Привет, аналитики! Сегодня я расскажу, куда я пропал почти на две недели. Но для начала хочу поздравить себя с Днём рождения! Да-да, именно сегодня оно и есть. А ещё я стал на год опытнее и на несколько седых волос ближе к дата-сайенсу. А теперь к главной теме поста. Мне предложили проверять работы (в том числе и финальные проекты) на курсе «Аналитика данных» в Симулейтив - онлайн-школе, в которой я сам обучался аналитике, благодаря которой я решился пройти этот нелёгкий путь и сменить профессию. Если вы уже являетесь студентом и подошли к финалу своего обучения, то очень вероятно, что именно я буду проверять вашу работу. Уже успешно проверил несколько работ. Я пока не ментор, но, так сказать, эксперт-преподаватель. Есть к чему стремиться. А ещё я проходил всякие собесы и выполнял тестовые задания. Не скажу, что их было прям очень много, но мне хватило. Даже попробовал пробиться в бигтех, ахахаха. В основном после собеса с HR я слышал отказы по причине: "Мы ищем аналитика с опытом от трёх лет", хотя весь мой опыт был указан в резюме изначально. К моему сожалению, конверсия на hh стала ещё меньше, чем год назад, но, несмотря на это, "касаний" с HR было больше. Но вполне возможно, что это связано с тем, что я откликался только на мидловые вакансии. Что из этого получилось, я расскажу через неделю =) #работа #hr @nullpp

  • Привет аналитики! Уже неделя прошла после стрима - и ни одного поста за это время! Немного был занят, чуть позже расскажу, это будет интересно =) А пока, хочу рассказать о прикольной штуке в SQL. Есть такая фишка как FILTER - удобная альтернатива CASE WHEN в некоторых случаях. Используется в агрегатных функциях. Например, вместо SUM(CASE WHEN condition THEN 1 END) можно написать COUNT(*) FILTER (WHERE condition) Согласитесь, такой синтаксис легче читается? Поддерживают: PostgreSQL, SQLite (3.30+), DuckDB, ClickHouse Нет в: MySQL, SQL Server, Oracle (там только CASE) Вот ещё пример: -- Продажи по статусу SELECT category, COUNT(*) FILTER (WHERE status = 'completed') AS completed, COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled FROM orders GROUP BY category; или -- Средний чек только по успешным SELECT AVG(amount) FILTER (WHERE paid_at IS NOT NULL) AS avg_paid FROM transactions; !!! В ClickHouse FILTER (WHERE ...) тоже работает, но есть нюанс. -- count(*) с FILTER не работает SELECT count(*) FILTER (WHERE uid > 2000) FROM users; -- используйте count(1) SELECT count(1) FILTER (WHERE uid > 2000) FROM users; Но вообще, в ClickHouse много всяких дополнительных функций, которые уже решают ряд задач. Например: -- Вместо FILTER SELECT avg(number) FILTER (WHERE number > 50) FROM numbers(100); -- Пишем короче и надёжнее SELECT avgIf(number, number > 50) FROM numbers(100); -- Количество успешных заказов SELECT countIf(1, status = 'completed') FROM orders; -- Сумма только крупных платежей SELECT sumIf(amount, amount > 1000) FROM payments; -- Уникальные пользователи из США SELECT uniqIf(user_id, country = 'US') FROM events; Ну как, полезно? Забирай в заметки и жми 🔥

  • Ну как? Понравился стрим? Успели решить 7 задачек разной сложности. К сожалению, все задачи максимальной сложности закрыты без подписки. Но и открытых задач ещё хватит на пару стримов =) Запись прошедшего стрима лежит тут https://www.youtube.com/watch?v=6WI_rsiD8Jw&t=366

NULL++ — tgindex