🐍 Рабочий кейс: как декораторы спасают мои выгрузки данных:
У нас на проекте данные постоянно перекладываются из одной СУБД в другую почти в режиме реального времени и если попасть на этот момент во время выгрузки, то выпадает ошибка и приходится перезапускать скрипт, а что если нужно выгрузить большой объема данных? Сидеть, смотреть и ручками все контролировать не наш вариант👨💻
Чтобы не обкладывать каждую функцию громоздкими
Посмотрим на максимально простой пример:
Что здесь происходит на самом деле?
Многие думают, что
Ваша функция
Давайте так:💯
Если под этим постом наберем 50 реакций, я выложу в комментарии свою реальную рабочую версию декоратора с этого кейса. Там настроено количество попыток, время ожидания между ними.
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ А какой самый непонятный момент в декораторах для вас? Попробуем разобрать в комментариях!👇
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Провожу обучение и консультации: mentor.dima-sqlit.ru
@dima_sqlit
У нас на проекте данные постоянно перекладываются из одной СУБД в другую почти в режиме реального времени и если попасть на этот момент во время выгрузки, то выпадает ошибка и приходится перезапускать скрипт, а что если нужно выгрузить большой объема данных? Сидеть, смотреть и ручками все контролировать не наш вариант
Чтобы не обкладывать каждую функцию громоздкими
try-except и не перезапускать всё руками, я использую декораторы. Давайте разберемся, что такое декораторы.Посмотрим на максимально простой пример:
def retry(func):
def wrapper(*args, **kwargs):
print("--- Логика ДО запуска (например, проверка связи) ---")
result = func(*args, **kwargs) # Запуск вашей функции
print("--- Логика ПОСЛЕ запуска ---")
return result
return wrapper
@retry
def get_data(month):
print(f"Выгружаем данные за {month}...")
get_data("Январь")
Что здесь происходит на самом деле?
Многие думают, что
@ — это какая-то магия. На самом деле, когда вы пишете @retry над функцией, Python делает за вас вот такую подстановку:get_data = retry(get_data)Ваша функция
get_data буквально залетает в retry как аргумент. А внутри wrapper мы уже можем докрутить что угодно: добавить цикл for для повторных попыток или поставить паузу time.sleep, чтобы подождать, пока данные «доедут» до хранилища.Давайте так:
Если под этим постом наберем 50 реакций, я выложу в комментарии свою реальную рабочую версию декоратора с этого кейса. Там настроено количество попыток, время ожидания между ними.
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥30🔥16 15🐳7 2 1
🔥 Claude Opus 4.6 (бесплатно) — а точнее MiMo-V2-Pro:
Да, вы не ослышались — бесплатный аналог уровня Claude Sonnet и Claude Opus. И я сам в это не верил, пока не попробовал.
Сейчас расскажу, как получить доступ к MiMo-V2-Pro абсолютно бесплатно и без ограничений на 7 дней.
Что такое MiMo-V2-Pro? 🤔
Это языковая модель от Xiaomi, которая по качеству ответов реально тянет на уровень Claude Sonnet и Claude Opus. Я активно тестирую её последние несколько дней и вам скажу честно — уровень вышка.
Сравнивал на своих задачах:
• Генерация SQL-запросов
• Объяснение кода
• Написание Python-скриптов
• Анализ данных
И самое главное — это бесплатно и безлимитно на 7 дней.
Как подключить? Всего 3 шага: ⚡️
1️⃣ Скачайте VS Code (если ещё нет):
https://code.visualstudio.com/
2️⃣ Установите расширение Kilo Code:
Откройте VS Code → Extensions (Ctrl+Shift+X) → найдите "Kilo Code" → Install
3️⃣ Выберите модель MiMo-V2-Pro:
После установки расширения в настройках выберите модель MiMo-V2-Pro — и всё, можно работать.
Почему стоит попробовать? 🔥
• Абсолютный безлимит на 7 дней — никаких ограничений по запросам
• Уровень Claude Sonnet/Opus — проверено на практике
• Работает прямо в VS Code — не нужно переключаться между окнами
• Бесплатно — ни копейки не платите
Я сам сейчас активно тестирую MiMo-V2-Pro для своих задач по аналитике и вам советую попробовать. Успевайте — неизвестно, сколько будет действовать бесплатный период.
Давайте так: 💯
Если под этим постом наберем 60 реакций, я выложу пост про то, как бесплатно использовать Nano Banana Pro — тоже топовая модель, для генерации изображений.
Итог:🤩
Если вы аналитик, разработчик или просто пишете код — попробуйте MiMo-V2-Pro через Kilo Code. Это реальная альтернатива платным моделям, которая работает не хуже.
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Пробовали MiMo-V2-Pro? Какие впечатления? Делитесь в комментариях!👇
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Провожу обучение и консультации: mentor.dima-sqlit.ru
@dima_sqlit
Да, вы не ослышались — бесплатный аналог уровня Claude Sonnet и Claude Opus. И я сам в это не верил, пока не попробовал.
Сейчас расскажу, как получить доступ к MiMo-V2-Pro абсолютно бесплатно и без ограничений на 7 дней.
Что такое MiMo-V2-Pro? 🤔
Это языковая модель от Xiaomi, которая по качеству ответов реально тянет на уровень Claude Sonnet и Claude Opus. Я активно тестирую её последние несколько дней и вам скажу честно — уровень вышка.
Сравнивал на своих задачах:
• Генерация SQL-запросов
• Объяснение кода
• Написание Python-скриптов
• Анализ данных
И самое главное — это бесплатно и безлимитно на 7 дней.
Как подключить? Всего 3 шага: ⚡️
https://code.visualstudio.com/
Откройте VS Code → Extensions (Ctrl+Shift+X) → найдите "Kilo Code" → Install
После установки расширения в настройках выберите модель MiMo-V2-Pro — и всё, можно работать.
Почему стоит попробовать? 🔥
• Абсолютный безлимит на 7 дней — никаких ограничений по запросам
• Уровень Claude Sonnet/Opus — проверено на практике
• Работает прямо в VS Code — не нужно переключаться между окнами
• Бесплатно — ни копейки не платите
Я сам сейчас активно тестирую MiMo-V2-Pro для своих задач по аналитике и вам советую попробовать. Успевайте — неизвестно, сколько будет действовать бесплатный период.
Давайте так: 💯
Если под этим постом наберем 60 реакций, я выложу пост про то, как бесплатно использовать Nano Banana Pro — тоже топовая модель, для генерации изображений.
Итог:
Если вы аналитик, разработчик или просто пишете код — попробуйте MiMo-V2-Pro через Kilo Code. Это реальная альтернатива платным моделям, которая работает не хуже.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥17 8🔥3 3 2 2🐳1 1 1
Считаем «окна» неактивности пользователя в SQL. Часть 1
На интервью в крупные финтех-компании (Тинькофф, Яндекс, Авито) часто дают эту задачу, чтобы проверить, умеете ли вы работать с временными рядами и оконными функциями.
Суть задачи:
Есть таблица логов
user_actions с колонками user_id и action_timestamp. Нужно найти все случаи, когда пользователь «пропадал» более чем на 30 минут между двумя действиями.Как это решается «на пальцах»?
Нам нужно сравнить время текущего действия со временем ПРЕДЫДУЩЕГО. В SQL для этого есть идеальный инструмент — оконная функция
LAG. Представьте, что вы стоите в очереди и спрашиваете человека сзади: «А когда зашел тот, кто был перед тобой?».Простейший пример решения:
WITH time_diffs AS (
SELECT
user_id,
action_timestamp,
-- Достаем время предыдущего действия для этого же юзера
LAG(action_timestamp) OVER(PARTITION BY user_id ORDER BY action_timestamp) as prev_ts
FROM user_actions
)
SELECT
user_id,
prev_ts as gap_start,
action_timestamp as gap_end,
-- Считаем разницу (в разных СУБД синтаксис даты чуть разный)
(action_timestamp - prev_ts) as duration
FROM time_diffs
WHERE (action_timestamp - prev_ts) > interval '30 minutes'
Почему здесь нужны оконные функции?
LAG понимал, какое действие было действительно предыдущим, данные должны быть отсортированы по времени.JOIN таблицы самой на себя, что на миллионах строк просто «повесит» базу.Давайте так: 👇
Эта задача — только верхушка айсберга. Если мы наберем под этим постом 50 реакций ❤️, я выложу вторую часть решения: как не просто найти разрывы, а сгруппировать их в полноценные сессии неактивности (задача Gaps and Islands в переводе "Пробелы и Острова").
Итог:
Оконные функции — это маст-хэв для аналитика. Научитесь пользоваться
LAG и LEAD, и 80% задач на временные интервалы будут решаться за 5 минут.@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥50🔥20🐳5
Нашёл для себя крутой канал про BI и дашборды — «Пирожки и бары»
Ведёт Маша, тимлид BI-аналитиков в Авито
Здесь реально полезно и при этом не занудно. Например, недавно там была прожарка графиков для королевы Елизаветы II — да, вы не ослышались
Ещё рекомендую глянуть:
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳6❤🔥5 5
Формируем сессии для пользователей по указанному интервалу времени в SQL. Часть 2
В предыдущем посте мы просто нашли разрывы неактивности. Сейчас рассмотрим продолжение «Сгруппируй все действия в сессии активности».
Давайте разберем это на примере с двумя пользователями (Вася и Петя) по шагам.
Исходные данные (6 строк логов):
| user_id | action_time | Комментарий
|---------|-------------|-------------
| Вася | 10:00 | Старт Васи (Сессия 1)
| Вася | 10:15 | Вася активен
| Вася | 11:30 | Разрыв! (75 мин) → Старт Васи (Сессия 2)
| Вася | 11:40 | Вася активен
| Петя | 12:00 | Старт Пети (Сессия 1)
| Петя | 12:10 | Петя активен
Шаг 1. Находим моменты «разрыва»:
С помощью
LAG мы смотрим разницу с предыдущим временем внутри каждого юзера. Если разница > 30 минут — ставим флаг 1.| user_id | action_time | Diff | is_new_session |
|---------|-------------|--------|------------------------|
| Вася | 10:00 | - | 0 |
| Вася | 10:15 | 15 мин | 0 |
| Вася | 11:30 | 75 мин | 1 (Новый остров) |
| Вася | 11:40 | 10 мин | 0 |
| Петя | 12:00 | - | 0 (Сброс счетчика) |
| Петя | 12:10 | 10 мин | 0 |
WITH step1 AS (
SELECT
user_id,
action_timestamp,
CASE
WHEN action_timestamp - LAG(action_timestamp) OVER(PARTITION BY user_id ORDER BY action_timestamp) > interval '30 minutes'
THEN 1 ELSE 0
END as is_new_session
FROM user_actions
),
Шаг 2. Хитрый трюк с кумулятивной суммой:
Нам нужно дать строчкам одной сессии общий ID. Мы суммируем наши флаги сверху вниз. Благодаря
PARTITION BY user_id сумма сбрасывается для нового юзера.| user_id | action_time | is_new_session | session_id (Сумма) |
|---------|-------------|----------------|---------------------------|
| Вася | 10:00 | 0 | 0 |
| Вася | 10:15 | 0 | 0 |
| Вася | 11:30 | 1 | 1 (Сумма стала 1) |
| Вася | 11:40 | 0 | 1 |
| Петя | 12:00 | 0 | 0 (Счетчик обнулился!) |
| Петя | 12:10 | 0 | 0 |
step2 AS (
SELECT
*,
SUM(is_new_session) OVER(PARTITION BY user_id ORDER BY action_timestamp) as session_id
FROM step1
)
Шаг 3. Финальная агрегация (и как сделать ID уникальным):
Теперь всё просто: мы говорим базе «Сгруппируй все действия с одинаковым
user_id и session_id в одну строку». Чтобы ID был глобально уникальным, мы склеиваем их.| user_id | unique_session_id | start | end | count |
|---------|-------------------|--------|--------|-------|
| Вася | Вася_0 | 10:00 | 10:15 | 2 |
| Вася | Вася_1 | 11:30 | 11:40 | 2 |
| Петя | Петя_0 | 12:00 | 12:10 | 2 |
SELECT
user_id,
-- Генерируем уникальный ID для сессии
user_id || '_' || session_id as unique_session_id,
MIN(action_timestamp) as session_start,
MAX(action_timestamp) as session_end,
COUNT(*) as actions_count
FROM step2
GROUP BY user_id, session_id
Давайте так: 👇
Вы накидываете интересные вам задачи в комментарии и я постараюсь разбирать некоторые из них в следующих постах. Ну и давайте наберем под этим постом 50 реакций ❤️ и я чуть позже приложу в комментариях этот пост в формате markdown для вашего удобства.
Итог:
Сохраняйте этот пример, чтобы не запутаться в логике!
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥24 10🐳9🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
«Мои навыки написания кода атрофируются» —цитата Андрея Карпатого.
Того самого, кто строил OpenAI и автопилот в Tesla.
Если даже такие гиганты признают, что перестают писать код «руками», то к чему готовиться нам? Просто нажимать кнопку «Сделай красиво» и надеяться на чудо? Скажу честно: я и сам всё меньше «пишу» и всё больше «проверяю». Дирижирую нейронками.
Казалось бы, вот оно — счастье: машина работает за тебя. Но именно за этой иллюзорной легкостью и зарыта главная западня, о которой молчат адепты «нейросети заменят всех»:
Итог:
Есть одна жесткая правда: ИИ делает умных умнее, а глупых — ещё глупее.
Если у вас есть база, нейронка становится вашим множителем. Она дает вам суперсилу и высвобождает время для реально сложных задач. Но если ваши знания в коде — это «ноль», то результат умножения на ИИ всё равно останется нулевым.
Учите базу сейчас, чтобы завтра быть тем самым «дирижёром», который ведет проект
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥16 7🐳6🔥1
Пятница — время релизов! Пока все уходят на чилл, я допилил то, что давно хотел: свою собственную базу знаний.
🔥 Ловите ссылку: dima-sqlit.ru
Скажу честно: это максимальный MVP. Я просто затащил туда часть постов из канала. Где-то криво, где-то косо, верстка местами может поплыть, но суть не в этом.
Почему я решил, что сайт — это круче, чем просто Telegram?
Что дальше? В планах — докрутить поиск, добавить новые категории и переписать посты в корректном виде.
Итог:
Это только начало. Мне очень важно ваше мнение: зайдите, потыкайте, оставьте обратную связь.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥30🔥14🐳6 3
🤖 Как бесплатно использовать Claude Code на базе Claude Sonnet 4.5:
Друзья, сегодня расскажу, как можно бесплатно попробовать Claude Code — мощный инструмент для работы с кодом на базе Claude Sonnet 4.5.
Что это даёт?
🔥 Claude Code — это не просто чат-бот. Это полноценный AI-ассистент для разработки, который умеет:
• Читать и анализировать код
• Писать и рефакторить функции
• Помогать с отладкой
• Работать с файлами проекта
Обычно доступ к Claude Sonnet 4.5 платный, но есть способ протестировать его бесплатно через omniroute.
Как это сделать:
1️⃣ Посмотрите это видео — там пошагово показано, как получить доступ к Claude Sonnet 4.5 через omniroute (код из видео я приложил в комментариях для вашего удобства).
2️⃣ Следуйте инструкциям из видео — настройка занимает буквально 10-15 минут.
3️⃣ Запускайте Claude Code и тестируйте все возможности: от генерации кода до работы с вашими проектами.
Почему стоит попробовать прямо сейчас?
⚡️ Пока есть возможность бесплатного доступа — используйте её! Это отличный шанс оценить, насколько AI может ускорить вашу работу с кодом.
🔥 Поставьте 50 реакций на этот пост — и я начну делать серию материалов о том, как я применяю нейронные сети в работе и повседневной жизни! Покажу реальные кейсы, которые упрощают рутину и экономят часы времени.
🚬 Провожу консультации по нейросетям: научу использовать эффективно, экономить на подписках и учиться быстрее с помощью AI.
🗽Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Друзья, сегодня расскажу, как можно бесплатно попробовать Claude Code — мощный инструмент для работы с кодом на базе Claude Sonnet 4.5.
Что это даёт?
🔥 Claude Code — это не просто чат-бот. Это полноценный AI-ассистент для разработки, который умеет:
• Читать и анализировать код
• Писать и рефакторить функции
• Помогать с отладкой
• Работать с файлами проекта
Обычно доступ к Claude Sonnet 4.5 платный, но есть способ протестировать его бесплатно через omniroute.
Как это сделать:
1️⃣ Посмотрите это видео — там пошагово показано, как получить доступ к Claude Sonnet 4.5 через omniroute (код из видео я приложил в комментариях для вашего удобства).
2️⃣ Следуйте инструкциям из видео — настройка занимает буквально 10-15 минут.
3️⃣ Запускайте Claude Code и тестируйте все возможности: от генерации кода до работы с вашими проектами.
Почему стоит попробовать прямо сейчас?
⚡️ Пока есть возможность бесплатного доступа — используйте её! Это отличный шанс оценить, насколько AI может ускорить вашу работу с кодом.
🔥 Поставьте 50 реакций на этот пост — и я начну делать серию материалов о том, как я применяю нейронные сети в работе и повседневной жизни! Покажу реальные кейсы, которые упрощают рутину и экономят часы времени.
🗽Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥45❤🔥8🐳7 2 2
🧠 Obsidian + нейронка — ваш личный второй мозг:
Каждый раз, когда открываешь нейронку — она тебя не помнит. Ни задач, которые ты уже решал, ни ошибок, на которых набивал шишки. Каждый раз с чистого листа.
А если дать ей память? Обсидиан + нейронка решают эту проблему раз и навсегда.
Идея простая: накапливаешь свою базу знаний в Obsidian → потом нейронка работает уже на основе твоего контекста.
Как это выглядит в жизни:✅
1️⃣ База знаний по работе Ведёшь рабочий дневник. Описываешь задачи: что за задача, как подошёл, с чем столкнулся, как решил. Через месяц у тебя не "ну я вроде что-то похожее делал", а конкретная точка входа.
🔵 Кейс 1 — ты помнишь, что что-то похожее уже решал, но не помнишь где. Спрашиваешь нейронку: «Я что-то подобное делал, помоги найти». Бам — находит.
🔵 Кейс 2 — хочешь понять, что можно автоматизировать в своей работе. Говоришь: «Посмотри всё, что я делал. Найди слабые места. Что можно ускорить и улучшить?» И получаешь реальный разбор, а не общие советы из интернета.
2️⃣ Личная база знаний (не рабочая) Ведёшь дневник, записываешь что читал, как питался, что смотрел, что думал. Потом спрашиваешь: «Хочу улучшить свою продуктивность — посмотри мои заметки и предложи, что поменять». Нейронка знает твою ситуацию, а не абстрактного человека из интернета.
Почему Obsidian, а не просто папка с файлами?✅
Там можно удобно строить связи между заметками. Вы сами настраиваете, что с чем связано — нейронка потом ориентируется в этой структуре и выдаёт релевантные ответы, а не гадает по куче разрозненных файлов.
Ещё один крутой кейс — добавление нового материала✅
Поработал с новым материалом, прочитал статью, прошёл кусок курса. Говоришь нейронке: «Вот новый материал. Проанализируй мою базу знаний и предложи, куда это вписать, с чем это связать». Она сама найдёт нужные заметки и покажет, как это встраивается в то, что ты уже знаешь.
Это работает для чего угодно: аналитика, английский язык, питание, саморазвитие — масса применений.
Чтобы разобраться с Obsidian с нуля, я уже писал об этом статью — вот ссылка: [Obsidian]
🔥 Набираем 70 реакций на этот пост — и готовлю новый огненный пост про использования нейронок
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Каждый раз, когда открываешь нейронку — она тебя не помнит. Ни задач, которые ты уже решал, ни ошибок, на которых набивал шишки. Каждый раз с чистого листа.
А если дать ей память? Обсидиан + нейронка решают эту проблему раз и навсегда.
Идея простая: накапливаешь свою базу знаний в Obsidian → потом нейронка работает уже на основе твоего контекста.
Как это выглядит в жизни:
Почему Obsidian, а не просто папка с файлами?
Там можно удобно строить связи между заметками. Вы сами настраиваете, что с чем связано — нейронка потом ориентируется в этой структуре и выдаёт релевантные ответы, а не гадает по куче разрозненных файлов.
Ещё один крутой кейс — добавление нового материала
Поработал с новым материалом, прочитал статью, прошёл кусок курса. Говоришь нейронке: «Вот новый материал. Проанализируй мою базу знаний и предложи, куда это вписать, с чем это связать». Она сама найдёт нужные заметки и покажет, как это встраивается в то, что ты уже знаешь.
Это работает для чего угодно: аналитика, английский язык, питание, саморазвитие — масса применений.
Чтобы разобраться с Obsidian с нуля, я уже писал об этом статью — вот ссылка: [Obsidian]
🔥 Набираем 70 реакций на этот пост — и готовлю новый огненный пост про использования нейронок
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥46🐳5❤🔥2 2 1
Накодил обновления на двух сайтах:
• 📚 Сайт с базой знаний: dima-sqlit.ru
• 🎓 Сайт с менторством: mentor.dima-sqlit.ru
• Переделал дизайн, подчистил интерфейс, сделал приятнее глазу.
• Добавил статьи с разбором базовых вопросов на собеседованиях — всё на сайте.
Прошу вас: 👇
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥21 10 7🔥4 2 1
🗂 Skill для аналитиков: один файл — и нейронка всегда знает, как ты работаешь
Есть штука, которую используют единицы, хотя она реально экономит время — скилл.
Что это такое технически? Обычный Markdown-файл с YAML-заголовком (frontmatter):
Как вызвать скилл? Два способа:
• 🤖 Автоматически — в поле description прописываешь триггер: «используется когда автор пишет про документацию». Нейронка сама подхватит
• ✋ Вручную — просто говоришь: «Используй скилл X, у меня вот такая задача». Я сам обычно так и делаю
Где это реально полезно в аналитике:
1️⃣ Документация Прописал раз: как оформлять описание таблиц, метрик, дашбордов. Теперь нейронка всегда пишет в твоём стиле — не нужно каждый раз объяснять структуру
2️⃣ Стиль кода Описал: функции оформляй так, комментарии — вот так, если код идёт в репозиторий — добавляй докстринги. Всё. Получаешь консистентный код без лишних правок
3️⃣ Шаблоны SQL-запросов Хочешь, чтобы запросы всегда были в определённом стиле: алиасы, форматирование, комментарии к сложной логике? Один скилл — и это работает по умолчанию
Как создать скилл под себя? Не нужно ничего писать вручную с нуля. Просто даёшь нейронке контекст: что хочешь автоматизировать, как это должно работать, примеры. Она сама создаст скилл. Быстро и под твои задачи.
❗️ Важно: не используй готовые скиллы из интернета без проверки — там может быть вредоносный код. Из проверенных могу рекомендовать скилл superpowers — разберём его подробно в одном из следующих постов.
Важно понимать: Скилл даёт скелет — хорошую базу. Но проверять логику, дополнять деталями и «доводить до ума» всё равно нужно самому. Нейронка пока не знает нюансов твоего проекта лучше тебя.
Итог:🤩
🔥 Ставим 70 реакций на этот пост — и делаю разбор скилла superpowers.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Есть штука, которую используют единицы, хотя она реально экономит время — скилл.
Что это такое технически? Обычный Markdown-файл с YAML-заголовком (frontmatter):
---
name: my_skill
description: Используется когда нужно написать документацию к коду
---
# Инструкция
[здесь твои правила и примеры]
Нейронка читает его автоматически и сразу понимает контекст. Больше ничего объяснять не нужно.
Как вызвать скилл? Два способа:
• 🤖 Автоматически — в поле description прописываешь триггер: «используется когда автор пишет про документацию». Нейронка сама подхватит
• ✋ Вручную — просто говоришь: «Используй скилл X, у меня вот такая задача». Я сам обычно так и делаю
Где это реально полезно в аналитике:
Как создать скилл под себя? Не нужно ничего писать вручную с нуля. Просто даёшь нейронке контекст: что хочешь автоматизировать, как это должно работать, примеры. Она сама создаст скилл. Быстро и под твои задачи.
❗️ Важно: не используй готовые скиллы из интернета без проверки — там может быть вредоносный код. Из проверенных могу рекомендовать скилл superpowers — разберём его подробно в одном из следующих постов.
Важно понимать: Скилл даёт скелет — хорошую базу. Но проверять логику, дополнять деталями и «доводить до ума» всё равно нужно самому. Нейронка пока не знает нюансов твоего проекта лучше тебя.
Итог:
🔥 Ставим 70 реакций на этот пост — и делаю разбор скилла superpowers.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38❤🔥6🐳4
Trino — это не база данных. Это распределённый SQL-движок, который подключается к десяткам источников: PostgreSQL, ClickHouse, Hive, S3 и другим. У него есть свои ресурсы (воркеры, память, CPU), но хранить данные он не умеет — он их берёт из источников и обрабатывает у себя.
И вот здесь начинаются сюрпризы.
Когда Trino выполняет запрос к внешнему источнику, в идеале он должен «протолкнуть» (push down) часть работы прямо туда: фильтры, агрегации, лимиты. Тогда источник вернёт уже обработанный результат — маленький и быстрый.
Но pushdown не всегда работает. Это зависит от конкретного коннектора, версии Trino и сложности запроса. Если pushdown не сработал — Trino тащит всю таблицу к себе и фильтрует уже у себя в памяти. Например:
-- Trino может вытащить всю таблицу orders и только потом отфильтровать
SELECT *
FROM postgres.public.orders
WHERE created_at > '2024-01-01'
Хочешь точно знать, что происходит? Смотри EXPLAIN — в плане будет видно, пошёл ли фильтр в источник или Trino делает это сам.
system.query — это способ сказать Trino: «не думай сам, выполни этот SQL прямо в источнике и просто верни мне результат».
1️⃣ PostgreSQL — тяжёлый фильтр по индексу:
SELECT *
FROM TABLE(
postgres.system.query(
query => 'SELECT id, amount FROM orders WHERE created_at > ''2024-01-01'''
)
)
PostgreSQL выполнит запрос сам, использует свои индексы — и вернёт только нужные строки.
2️⃣ ClickHouse — агрегация на стороне источника:
SELECT *
FROM TABLE(
clickhouse.system.query(
query => 'SELECT event_date, count() FROM events GROUP BY event_date'
)
)
ClickHouse заточен под колоночные агрегации. Если делать GROUP BY в Trino поверх ClickHouse — он сначала вытащит все сырые строки. system.query оставляет агрегацию там, где ей место.
✅ Используй, если мысленно отвечаешь «да» хотя бы на один вопрос:
• «Я точно знаю, что эта логика быстрее выполнится в источнике» → используй
• «Таблица большая, а мне нужен маленький срез — и я не уверен, что Trino сам догадается» → используй
• «Я делаю агрегацию в ClickHouse и не хочу гонять миллионы строк» → используй
• «EXPLAIN показывает, что pushdown не работает» → используй
❌ Не используй, если:
• Нужно джойнить данные из разных источников — тут Trino незаменим, system.query не даст соединить PG и ClickHouse в одном запросе
• Запрос простой и ты уверен, что pushdown сработал
• Хочешь переносимый запрос без привязки к диалекту источника
Итог:
🔥 Набираем 70 реакций на этот пост — так я пойму, что стоит делать больше таких разборов.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25 8❤🔥6
🎙 Иду на AHA'26 — и вам советую:
22 мая в Москве проходит AHA'26 — конференция для тех, кто работает с данными и AI. Решил пойти сам — и вот почему.
Там реально интересная программа: как компании проверяют идеи быстрее и дешевле, как строят AI-продукты, которые реально работают, как не утонуть в данных и доверять тому, что в них написано. Без воды — только практика от команд, которые уже это сделали.
Выступают ребята из Яндекса, Авиасейлс, Сбера, X5 Tech, ВкусВилла, Wildberries, Т-Банка и ещё десятков компаний. Это не те, кто рассказывает «как надо» в теории — это те, кто уже запустил и работает с этим каждый день.
Форматы:
• Офлайн — 39 900 ₽ (22 мая + онлайн-день 14 мая + записи на 6 месяцев)
• Онлайн — 19 900 ₽ (трансляции 14 и 22 мая + материалы на 6 месяцев)
🎁 Для подписчиков моего канала — скидка 10% по промокоду DSQLIT10 при регистрации на сайте.
👋 Если тоже идёте офлайн — пишите, возможно, пересечёмся
❔ Планируете идти? Офлайн или онлайн? Делитесь в комментариях!
22 мая в Москве проходит AHA'26 — конференция для тех, кто работает с данными и AI. Решил пойти сам — и вот почему.
Там реально интересная программа: как компании проверяют идеи быстрее и дешевле, как строят AI-продукты, которые реально работают, как не утонуть в данных и доверять тому, что в них написано. Без воды — только практика от команд, которые уже это сделали.
Выступают ребята из Яндекса, Авиасейлс, Сбера, X5 Tech, ВкусВилла, Wildberries, Т-Банка и ещё десятков компаний. Это не те, кто рассказывает «как надо» в теории — это те, кто уже запустил и работает с этим каждый день.
Форматы:
• Офлайн — 39 900 ₽ (22 мая + онлайн-день 14 мая + записи на 6 месяцев)
• Онлайн — 19 900 ₽ (трансляции 14 и 22 мая + материалы на 6 месяцев)
🎁 Для подписчиков моего канала — скидка 10% по промокоду DSQLIT10 при регистрации на сайте.
👋 Если тоже идёте офлайн — пишите, возможно, пересечёмся
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7 7❤🔥4 3🐳1
⚡️ Параллельные запросы в ClickHouse через Python — ускоряем выгрузку в разы:
Знакомая ситуация: нужно выгрузить данные за 30 дней, пишешь цикл, день за днём, и ждёшь 30 минут.
А можно запустить все запросы одновременно и получить результат в 5–10 раз быстрее.
Сегодня покажу, как это сделать на простом примере.
Что сделаем:
🟢 Напишем функцию, которая выгружает данные за один день из ClickHouse.
🟢 Запустим её для нескольких дат параллельно с помощью
🟢 Соберём все результаты в один
Разбор по шагам:
1️⃣ Функция для одного дня:
Создаём функцию
2️⃣ Запускаем параллельно:
Используем
Что происходит под капотом:
•
•
•
•
То есть
3️⃣ Собираем результаты:
🌟 Как это выглядит в консоли:
Итог:🤩
Как выбирать max_workers?
• Для тяжёлых запросов к БД: 3–5 воркеров
• Для лёгких API-запросов: 10–20 воркеров
• Начинайте с 3 и смотрите на нагрузку базы — ClickHouse может обрабатывать ограниченное число запросов одновременно
🚀 Работает не только с ClickHouse — PostgreSQL, MySQL, любые API. Паттерн универсальный.
🔥 Набираем 70 реакций на этот пост — так я пойму, что стоит делать больше таких разборов.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
🚬 Вопросы, менторство, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Знакомая ситуация: нужно выгрузить данные за 30 дней, пишешь цикл, день за днём, и ждёшь 30 минут.
А можно запустить все запросы одновременно и получить результат в 5–10 раз быстрее.
Сегодня покажу, как это сделать на простом примере.
Что сделаем:
ThreadPoolExecutor.DataFrame.Разбор по шагам:
Создаём функцию
load_day — она принимает дату, делает запрос в ClickHouse и возвращает DataFrame:import clickhouse_connect
import pandas as pd
def load_day(date_str):
print(f' [{date_str}] → запрос начат')
client = clickhouse_connect.get_client(**CH_CREDS)
df = client.query_df(f"""
SELECT * FROM events
WHERE date = '{date_str}'
""")
client.close()
print(f' [{date_str}] → готово, строк: {len(df)}')
return df
Используем
ThreadPoolExecutor. Ключевой момент — функция начинает выполняться прямо в момент вызова submit():from concurrent.futures import ThreadPoolExecutor, as_completed
dates = ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04']
executor = ThreadPoolExecutor(max_workers=3)
tasks = {executor.submit(load_day, d): d for d in dates}
# ↑ вот здесь load_day УЖЕ запустилась в фоновом потоке
# submit() не ждёт результата — сразу возвращает "квитанцию" (Future)
# и цикл переходит к следующей дате
Что происходит под капотом:
•
submit(load_day, '2024-01-01') → поток 1 сразу побежал делать запрос в ClickHouse •
submit(load_day, '2024-01-02') → поток 2 сразу побежал, пока первый ещё работает •
submit(load_day, '2024-01-03') → поток 3 сразу побежал •
submit(load_day, '2024-01-04') → все 3 воркера заняты — ждёт в очередиТо есть
submit() — это как «отдать задание курьеру». Курьер побежал, а ты уже отдаёшь задание следующему. max_workers=3 — значит у тебя 3 курьера. Четвёртое задание ляжет на стол и подождёт, пока кто-то вернётся.as_completed отдаёт задачи по мере их завершения — какая первая закончилась, ту и получаем:results = []
for task in as_completed(tasks):
date = tasks[task]
try:
results.append(task.result())
print(f' {date} — результат получен ✅')
except Exception as e:
print(f' {date} — ошибка: {e} ❌')
executor.shutdown()
df = pd.concat(results, ignore_index=True)
print(f'Всего строк: {len(df)}')
[2024-01-01] → запрос начат ← воркер 1 стартовал
[2024-01-02] → запрос начат ← воркер 2 стартовал
[2024-01-03] → запрос начат ← воркер 3 стартовал
[2024-01-03] → готово, строк: 1200
2024-01-03 — результат получен ✅
[2024-01-04] → запрос начат ← воркер 3 освободился, взял 4-й день
[2024-01-01] → готово, строк: 980
2024-01-01 — результат получен ✅
...
Итог:
Как выбирать max_workers?
• Для тяжёлых запросов к БД: 3–5 воркеров
• Для лёгких API-запросов: 10–20 воркеров
• Начинайте с 3 и смотрите на нагрузку базы — ClickHouse может обрабатывать ограниченное число запросов одновременно
🚀 Работает не только с ClickHouse — PostgreSQL, MySQL, любые API. Паттерн универсальный.
🔥 Набираем 70 реакций на этот пост — так я пойму, что стоит делать больше таких разборов.
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33❤🔥5🐳5
Сегодня хочу познакомить вас с Олегом — аналитиком данных с 5+ лет в B2B и B2G-проектах. Работал с заказчиками от стартапов до госсектора, набил шишки на каждом этапе — от сбора требований до сдачи отчётов.
Рекомендую начать знакомство с постов:
1) Первый — как Олег попал в IT: от техподдержки охранной компании, через проваленное тестовое — до аналитика на реальных проектах. Мотивирует 🔥
2) Второй — история «Договорился и передоговорился»: заказчик согласовал объём, а потом пришёл с 300% дополнительных требований за те же деньги.
3) Третий — план канала на 2026 год, что Олег будет разбирать весь год и в какой последовательности — от Excel и SQL до Python, портфолио и продуктового мышления. Удобно, чтобы не пропустить что-то нужное
4) И много других интересных постов......
Если вам интересно:
• как устроена работа аналитика в B2B и B2G
• как выстраивать отношения с заказчиками и защищать свои границы
• как строить карьеру в IT с нуля — без нужного диплома и опыта
Подписывайтесь на «Data Дзен», чтобы не потерять
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Сделал телеграм-бота за вечер — и вот зачем:
Раньше прикладывал материалы прямо в постах или комментариях.
Но когда материала становится больше — это неудобно: и вам лень искать по истории, и мне неудобно хранить.
Поэтому я сделал отдельного бота. Логично, удобно, по-человечески.
Как это работает — win-win для всех:🤯
1️⃣ Для вас — все материалы собраны в одном месте. Заходите в бот, тыкаете нужное, и оно сразу прилетает вам. Никакой беготни по постам.
2️⃣ Для меня — бот требует подписку на канал, и тем самым помогает мне наращивать аудиторию. Абсолютно бесплатно для вас — это просто подписка.
3️⃣ В будущем — возможно появятся платные материалы. Но пока две модели: совсем без подписки, или с подпиской. Всё прозрачно.
И да — написал этого бота за один вечер при помощи нейронок🌟
Это к тому, что AI уже сейчас позволяет создавать проекты, которые реально закрывают ваши задачи даже если вы не разработчик.🌟
Что уже есть в боте:🤛
Первые 5 каруселей по A/B тестам — уже там. Я давно хотел систематизировать для себя эту тему, и решил совместить полезное с приятным: делаю красивые слайды, которые коротко и понятно объясняют материал по AB-тестам.
Буду рад вашей обратной связи:
• Как работает бот?
• Нравится ли визуал и подача?
• Что непонятно или хочется доработать?
• Накиньте ваших реакций, чтобы понимать интересно вам такое или нет 🔥
А если вы хорошо шарите в A/B тестах и хотите помочь с материалом — вэлком в ЛС
Итог:🤩
• Если вам самим интересно внедрить AI — в работу, в личные проекты, или просто понять, что с этим вообще можно делать — могу проконсульровать (все индивидуально под ваш запрос).
• Ну или может быть вам нужно сделать какой-то аналогичны проект под ключ, также можете писать с вашими запросами, интересно и в эту тему развиваться.
🌟 Ссылка на бота (гоу тестировать): Бот_канала_dima_sqlit
🚬 Вопросы, менторство, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Раньше прикладывал материалы прямо в постах или комментариях.
Но когда материала становится больше — это неудобно: и вам лень искать по истории, и мне неудобно хранить.
Поэтому я сделал отдельного бота. Логично, удобно, по-человечески.
Как это работает — win-win для всех:
И да — написал этого бота за один вечер при помощи нейронок
Это к тому, что AI уже сейчас позволяет создавать проекты, которые реально закрывают ваши задачи даже если вы не разработчик.
Что уже есть в боте:
Первые 5 каруселей по A/B тестам — уже там. Я давно хотел систематизировать для себя эту тему, и решил совместить полезное с приятным: делаю красивые слайды, которые коротко и понятно объясняют материал по AB-тестам.
Буду рад вашей обратной связи:
• Как работает бот?
• Нравится ли визуал и подача?
• Что непонятно или хочется доработать?
• Накиньте ваших реакций, чтобы понимать интересно вам такое или нет 🔥
А если вы хорошо шарите в A/B тестах и хотите помочь с материалом — вэлком в ЛС
Итог:
• Если вам самим интересно внедрить AI — в работу, в личные проекты, или просто понять, что с этим вообще можно делать — могу проконсульровать (все индивидуально под ваш запрос).
• Ну или может быть вам нужно сделать какой-то аналогичны проект под ключ, также можете писать с вашими запросами, интересно и в эту тему развиваться.
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤🔥7🐳4 1 1
Ранее писал про то, как я был первый раз на матемаркетинге, вот здесь можно почитать про это.
Ну а сейчас напишу про мой первый раз на AHA
С кем удалось пообщаться и познакомиться:
•
•
•
•
•
Завёл кучу полезных контактов — это, пожалуй, одна из главных ценностей таких мероприятий.
Некоторые доклады послушаю в записи. Всё-таки доклад можно посмотреть потом, а живое общение — только в моменте. Поэтому ни о чём не жалею.
На фото — всё, что удалось натаскать со стендов. Смотрите сами
Итог:
❓ Были на AHA 2026? Что смогли забрать со стендов? Пишите в комментариях — может, пересечёмся на следующем мероприятии в Москве!
А пока хочу спросить: что хотите видеть дальше?
• 🔧 Техничку — SQL, особенности СУБД, Python
• 🏠 Материал про IT-ипотеку и ремонт (накопилось много — планирую начать писать про это)
• 👇Или предложите свою тему в комментах
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤🔥10 8
Вам знакома ситуация, когда - написал большой sql запрос для задачи, а потом заказчик говорит: «Покажи то же самое, но за прошлый квартал» ?
И вы начинаете искать дату по всему файлу. Находите все вхождения, правите — и где-то всё равно пропускаешь одно. Запрос считает не то.
В общем очень много рутины.
start_date = "2024-01-01"
discount_threshold = 0.10
WITH params AS (
SELECT
DATE '2024-01-01' AS period_start,
DATE '2024-03-31' AS period_end,
0.10 AS discount_threshold
),
big_orders AS (
SELECT
o.order_id,
o.amount,
o.discount
FROM orders o
CROSS JOIN params p
WHERE o.order_date BETWEEN p.period_start AND p.period_end
AND o.discount > p.discount_threshold
)
SELECT * FROM big_orders
Все параметры — в одном месте сверху. Поменял квартал один раз — везде пересчиталось.
CROSS JOIN здесь — это не страшно.
params возвращает одну строку.CROSS JOIN просто «прицепляет» эту строку к каждой строке основной таблицы.🔥 Набираем 70 реакций на этот пост, чтобы подобные посты выходили чаще
Итог:
🗂 Это один из тех приёмов, который занимает 10 секунд, но экономит кучу времени на поддержке запроса.
❓ А как вы решаете эту проблему — хардкодите или есть другой подход? Пишите в комментах!
📤 Пересылай пост коллеге или другу из аналитики — это бесплатно и помогает каналу расти. Спасибо!
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥65❤🔥17 9 3
🔐 SQL-инъекция — типы, примеры и защита: всё что нужно знать аналитику:
Один из вопросов, который может быть на собесе - это что такое "SQL-инъекция".
Давайте разберёмся, как обычно с кодом и без воды.
🟢 Как работает атака:
Бэкенд строит запрос прямо из того, что ввёл пользователь:
Кавычки вокруг ввода уже вшиты в шаблон кода. Злоумышленник вводит
Левая кавычка уже есть в шаблоне — злоумышленник дописывает только закрывающую
🟢 3 основных типа SQL-инъекций:
1️⃣ Классическая — результат виден прямо в ответе сайта. Самый простой случай как выше.
2️⃣ Слепая (Blind) — сайт не выводит данные, но страница реагирует по-разному. Злоумышленник добавляет условие через AND к рабочему запросу:
Если буква угадана →
По реакции страницы злоумышленник понимает верна ли буква — как игра «горячо-холодно». Перебирает символ за символом.
3️⃣ Через UNION — дописывает свой SELECT к оригинальному и вытаскивает данные из любой таблицы. Структуру БД знать заранее не нужно — она вытаскивается через
🟢 Как защититься:
Без защиты Python склеивает строку и отдаёт в БД целиком — данные и команды уже неразличимы:
С параметрами шаблон и данные уходят в БД раздельно:
БД сначала получает шаблон → разбирает и фиксирует структуру запроса. Потом получает данные — и воспринимает их только как текст для поиска. Апостроф внутри
🟢 Ответ на собесе — коротко:
Итог:🤩
❓ Спрашивали про SQL-инъекцию на вашем собесе? Пишите в комментарии!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Вопросы, менторство, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Один из вопросов, который может быть на собесе - это что такое "SQL-инъекция".
Давайте разберёмся, как обычно с кодом и без воды.
Бэкенд строит запрос прямо из того, что ввёл пользователь:
SELECT * FROM users
WHERE username = 'ВВОД' AND password = 'ВВОД';
Кавычки вокруг ввода уже вшиты в шаблон кода. Злоумышленник вводит
admin' -- и запрос превращается в:WHERE username = 'admin' --' AND password = '...';
Левая кавычка уже есть в шаблоне — злоумышленник дописывает только закрывающую
'. Она обрывает строку досрочно, -- превращает всё остальное в комментарий. Проверка пароля выброшена — вход открыт.SELECT * FROM products WHERE id = 1
AND SUBSTRING(password, 1, 1) = 'a'
Если буква угадана →
TRUE AND TRUE → товар найден → страница загрузилась Если не угадана → TRUE AND FALSE → товар не найден → страница пустаяПо реакции страницы злоумышленник понимает верна ли буква — как игра «горячо-холодно». Перебирает символ за символом.
information_schema, системный справочник который есть в каждой БД:-- Шаг 1: узнать все таблицы
' UNION SELECT table_name, null FROM information_schema.tables --
-- Шаг 2: узнать поля нужной таблицы
' UNION SELECT column_name, null FROM information_schema.columns
WHERE table_name = 'users' --
-- Шаг 3: вытащить данные
' UNION SELECT username, password FROM users --
Без защиты Python склеивает строку и отдаёт в БД целиком — данные и команды уже неразличимы:
# ПЛОХО
query = "SELECT * FROM users WHERE username = '" + username + "'"
С параметрами шаблон и данные уходят в БД раздельно:
# ХОРОШО
cursor.execute(
"SELECT * FROM users WHERE username = %s",
(username,)
)
БД сначала получает шаблон → разбирает и фиксирует структуру запроса. Потом получает данные — и воспринимает их только как текст для поиска. Апостроф внутри
admin' -- уже просто символ, а не SQL-синтаксис — структура зафиксирована и данные её изменить не могут.«SQL-инъекция — это вид атаки, когда пользовательский ввод попадает напрямую в строку SQL-запроса и исполняется как код. Защита — параметризованные запросы: шаблон и данные идут в БД раздельно, поэтому данные никогда не интерпретируются как SQL-команды.»
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19❤🔥8 6🐳1 1 1
📊 SQL трюк — как добавить строку «Все категории» к любому отчёту через UNION ALL (ЧАСТЬ 1):
Ситуация, с которой многие сталкиваются на работе.
Давайте представим таблицу с продажами orders:
И нужно сделать отчёт по продажам, который будет показывать в разрезе категорий тотал продажи — и при этом должна быть отдельная категория, которая объединяла бы все остальные. Её как раз мы искусственно и добавим через
🟢 Шаг 1 — обычная разбивка по категориям:
Получаем это:
Хорошо, но итога по всем нет. Добавляем его через
🟢 Шаг 2 — добавляем строку «Все категории»:
Результат:
Второй запрос считает тотал по всей таблице, а в поле
Почему
В нашем случае дублей нет — строка
Так что
🟢 Бонус — строка с тоталом всегда внизу:
🟢 Хотите еще таких лайфхаков ?
🔥 Набираем 70 реакций на этот пост, чтобы подобные посты выходили чаще
Итог:🤩
❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ А какие ещё задачи решаете через
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.
🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Ситуация, с которой многие сталкиваются на работе.
Давайте представим таблицу с продажами orders:
order_id | category | revenue
1 | Одежда | 1500
2 | Обувь | 1200
3 | Техника | 2500
4 | Одежда | 5500
.........
И нужно сделать отчёт по продажам, который будет показывать в разрезе категорий тотал продажи — и при этом должна быть отдельная категория, которая объединяла бы все остальные. Её как раз мы искусственно и добавим через
UNION ALL.SELECT
category,
SUM(revenue) AS total_revenue,
COUNT(order_id) AS orders_count
FROM orders
GROUP BY category
Получаем это:
category | total_revenue | orders_count
Одежда | 7000 | 2
Обувь | 1200 | 1
Техника | 2500 | 1
Хорошо, но итога по всем нет. Добавляем его через
UNION ALL.SELECT
category,
SUM(revenue) AS total_revenue,
COUNT(order_id) AS orders_count
FROM orders
GROUP BY category
UNION ALL
SELECT
'Все категории' AS category,
SUM(revenue),
COUNT(order_id)
FROM orders
Результат:
category | total_revenue | orders_count
Одежда | 7000 | 2
Обувь | 1200 | 1
Техника | 2500 | 1
Все категории | 10700 | 4
Второй запрос считает тотал по всей таблице, а в поле
category мы просто подставляем строку 'Все категории' — и она встаёт отдельной строкой в результате.Почему
UNION ALL, а не просто UNION?UNION под капотом делает сортировку и удаляет дубликаты — это лишняя работа для базы.UNION ALL просто склеивает результаты как есть, без лишних операций.В нашем случае дублей нет — строка
'Все категории' явно уникальна.Так что
UNION тут ни к чему, берём UNION ALL — он быстрее.WITH combined AS (
SELECT
category,
SUM(revenue) AS total_revenue,
COUNT(order_id) AS orders_count
FROM orders
GROUP BY category
UNION ALL
SELECT
'Все категории',
SUM(revenue),
COUNT(order_id)
FROM orders
)
SELECT *
FROM combined
ORDER BY
CASE WHEN category = 'Все категории' THEN 1 ELSE 0 END,
category
🔥 Набираем 70 реакций на этот пост, чтобы подобные посты выходили чаще
Итог:
UNION ALL — поделитесь в комментариях!@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41❤🔥11🐳10
🏠 IT ипотека (Часть 1) — выбор города и района:
Решил задокументировать весь путь — от выбора места до финального результата. Это первый пост из серии, поехали.
Почему вообще купил и зачем именно сейчас:
Хотелось закрыть гештальт. Может, это и не самое выгодное финансовое решение, но психологически — точно правильное. Своя квартира = спокойствие (по крайней мере у меня так).
Почему не Москва:
Изначально хотел, конечно, Москву, но эту опцию быстро прикрыли и я не успел, но считаю, что IT ипотека на данный момент все равно один из самых привлекательных вариантов. Ну если не Москва, то ближайшее подмосковье подумал я и начал смотреть варианты, для меня основные параметры были это транспортная доступность и готовые варианты, чтобы быстро сделать ремонт и заехать. В итоге был выбран город Красногорск.
Что по итогу выбрал:
По итогу выбор пал на ЖК, который находится рядом с МЦД (в 10 минутах ходьбы). По отделке — это черновой вариант (стены и окна). White box оставались только трех-комнатные квартиры, что дорого и не ликвидно. Поскольку это черновой вариант решено было проектировать и разбираться во всем этом самостоятельно (благо есть знакомые и родственники с кем можно было советоваться). Подумал, что будет интересно под разобраться в этом (тем более по образованию я инженер-строитель) по этому в следующих постах буду рассказывать про ремонт, создание проекта, где я смог сэкономить и так далее.
🔥 Набираем 70 реакций на этот пост, чтобы посты про IT ипотеку выходили быстрее
Итог:🤩
❓ А как вы относитесь к Ипотеке?
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.
🚬 Вопросы, менторство, консультации: Написать в ЛС | mentor.dima-sqlit.ru
@dima_sqlit
Решил задокументировать весь путь — от выбора места до финального результата. Это первый пост из серии, поехали.
Почему вообще купил и зачем именно сейчас:
Хотелось закрыть гештальт. Может, это и не самое выгодное финансовое решение, но психологически — точно правильное. Своя квартира = спокойствие (по крайней мере у меня так).
Почему не Москва:
Изначально хотел, конечно, Москву, но эту опцию быстро прикрыли и я не успел, но считаю, что IT ипотека на данный момент все равно один из самых привлекательных вариантов. Ну если не Москва, то ближайшее подмосковье подумал я и начал смотреть варианты, для меня основные параметры были это транспортная доступность и готовые варианты, чтобы быстро сделать ремонт и заехать. В итоге был выбран город Красногорск.
Что по итогу выбрал:
По итогу выбор пал на ЖК, который находится рядом с МЦД (в 10 минутах ходьбы). По отделке — это черновой вариант (стены и окна). White box оставались только трех-комнатные квартиры, что дорого и не ликвидно. Поскольку это черновой вариант решено было проектировать и разбираться во всем этом самостоятельно (благо есть знакомые и родственники с кем можно было советоваться). Подумал, что будет интересно под разобраться в этом (тем более по образованию я инженер-строитель) по этому в следующих постах буду рассказывать про ремонт, создание проекта, где я смог сэкономить и так далее.
🔥 Набираем 70 реакций на этот пост, чтобы посты про IT ипотеку выходили быстрее
Итог:
@dima_sqlit
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥76❤🔥8🐳8