SQL и Анализ данных
описание
Базы данных и всё, что с ними связано! Сотрудничество: @haarrp РКН № 6766085482
12 538
подписчиков
Охват к подписчикам
15,6%
ERR
Реакции к просмотрам
0,35%
333 на 37 постов
Пересылки к просмотрам
1,40%
1 312
Постов в день
0,3
всего 37
Где отзываются чаще
доля реакций к просмотрам- 9 авг.⚡️ QueryTuner - open-source инструмент, который разбирает SQL-запрос и показывает, почему он может тормозить. Подключаться к базе вообще не обязательно. Можно просто вставить SQL и получить диагностику. Поддерживаются сразу 5 диалектов: - PostgreSQL - MySQL - Oracle - SQL Server - SQLite Внутри два уровня анализа. 1. Детерминированный heuristic engine Он мгновенно ищет типичные anti-patterns: - SELECT * - функции внутри WHERE - leading wildcard в LIKE - потенциально отсутствующие индексы - ORDER BY без ограничения результата - другие проблемы производительности Сейчас заявлено 12 правил, и для них не нужны ни LLM, ни внешний API. 2. Опциональный AI-слой Можно подключить Qwen через Hugging Face или OpenAI. Тогда QueryTuner умеет: - объяснять проблему человеческим языком; - переписывать запрос; - предлагать CREATE INDEX; - объяснять, зачем конкретный индекс нужен. Особенно интересно, что можно передать ещё и CREATE TABLE DDL. Тогда рекомендации становятся schema-aware: инструмент видит реальные таблицы, колонки и существующие индексы. Например, для такого запроса: SELECT * FROM orders WHERE YEAR(created_at) = 2026; Хороший проект для тех случаев, когда SQL уже работает, но хочется понять, почему через полгода он начнёт работать плохо. #SQL #PostgreSQL #Database #OpenSource #DataEngineering https://github.com/AutoShiftOps/querytuner1,27%
- 7 авг.💡 SQL-трюк: сравнивайте `NULL` без костылей В PostgreSQL обычное сравнение может неожиданно сломать условие: SELECT NULL = NULL; Результат: NULL Потому что NULL означает «неизвестное значение», а не конкретное значение. Из-за этого часто пишут громоздкие условия: WHERE a = b OR (a IS NULL AND b IS NULL) Но есть оператор, о котором многие забывают: a IS NOT DISTINCT FROM b Он работает как NULL-safe equality: SELECT NULL IS NOT DISTINCT FROM NULL; -- true SELECT 10 IS NOT DISTINCT FROM 10; -- true SELECT 10 IS NOT DISTINCT FROM NULL; -- false Есть и обратный вариант: a IS DISTINCT FROM b Например, удобно искать реально изменившиеся значения: SELECT * FROM old_data o JOIN new_data n USING (id) WHERE o.email IS DISTINCT FROM n.email; Если оба email = NULL, строка не считается изменённой. Без этого обычное: o.email <> n.email может просто вернуть NULL и пропустить изменение. Особенно полезно при синхронизации данных, аудите изменений, ETL и UPSERT-логике. #SQL #PostgreSQL #Database1,21%
- 31 июл.⚡️ Программистов пытаются отменить уже больше 60 лет COBOL создавали так, чтобы код могли писать менеджеры. SQL называли «структурированным английским». Затем появились 4GL, UML, low-code и no-code. Каждый раз индустрия обещала программирование без программистов — и каждый раз получала новые специализации. Теперь ту же роль играют LLM и вайбкодинг. Проблема упирается в естественный язык. Фраза «удали файлы старше 30 дней» сразу порождает вопросы: учитывать дату создания или изменения, трогать ли подпапки, скрытые файлы и симлинки? Чем сложнее система, тем опаснее такие умолчания. Кто-то всё равно должен уточнить требования, проверить результат и отвечать за прод. ИИ убирает бойлерплейт и ускоряет написание кода. Ценность разработчика смещается в архитектуру, доменную логику, безопасность и контроль. Профессия не исчезает. Она снова меняет название. Статья: https://habr.com/ru/articles/1058500/0,96%
- 9 авг. 2025 г.🗓️ SQL-трюк: как быстро найти "дыры" в данных по датам В аналитике часто нужно понять, за какие дни нет записей — например, продаж или логов. Вместо сложных процедур можно сгенерировать календарь через generate_series() (Postgres) и сделать LEFT JOIN к данным. Так вы мгновенно выявите пропуски и сможете строить непрерывные временные ряды. -- Дни без заказов за последние 30 дней WITH calendar AS ( SELECT generate_series( current_date - interval '30 days', current_date, interval '1 day' )::date AS day ), orders_per_day AS ( SELECT order_ts::date AS day, COUNT(*) AS orders_count FROM sales WHERE order_ts >= current_date - interval '30 days' GROUP BY order_ts::date ) SELECT c.day, COALESCE(o.orders_count, 0) AS orders_count FROM calendar c LEFT JOIN orders_per_day o USING(day) WHERE o.orders_count IS NULL ORDER BY c.day; https://www.youtube.com/shorts/CAkHyUx6iiU #SQL #Postgres #DataAnalytics #generate_series0,76%
- 24 июл.📌 Oracle сократила 21 000 сотрудников и теперь может получить счёт на $7 млрд из-за ИИ За финансовый 2026 год штат Oracle сократился примерно на 21 000 человек, или на 13%. Компания прямо указала, что внедрение ИИ стало одним из факторов сокращений. Параллельно Oracle строит гигантскую ИИ-инфраструктуру для OpenAI. Один из проектов - дата-центр в Висконсине мощностью около 1 ГВт, связанный с контрактом OpenAI и Oracle на $300 млрд. Регуляторы Висконсина требуют от крупных дата-центров с недостаточно высоким кредитным рейтингом финансовые гарантии, чтобы расходы на электростанции и сети не легли на обычных потребителей. После снижения рейтинга Oracle до BBB-, компания может попасть под требование предоставить более $7 млрд обеспечения. Банковская гарантия такого размера способна обходиться более чем в $100 млн ежегодно. Oracle уже оспаривает правила в суде.0,67%
- 14 июн. 2025 г.🦆 DuckDB + Python: мощный тандем для аналитики прямо на ноутбуке Если вы работаете с аналитикой данных и вам важна скорость, гибкость и простота — попробуйте связку DuckDB + Python. Это встроенная колонко-ориентированная СУБД, которая отлично работает с pandas, Parquet и SQL-запросами — прямо в памяти, без сервера. 📌 Что такое DuckDB? - Лёгкая SQL-база данных - Работает как SQLite, но оптимизирована под аналитику - Отлично справляется с файлами Parquet и Arrow - Идеально для обработки больших наборов данных локально 🔗 Возможности интеграции с Python: - Прямой запрос к pandas DataFrame: con.execute("SELECT * FROM df WHERE col > 10").df() - Работа с файлами: con.execute("SELECT COUNT(*) FROM 'data.parquet'") - Использование SQL + pandas + визуализация в одном блоке 💡 Преимущества: - 🚀 Быстрее pandas при агрегациях и фильтрации - 🔗 Поддержка Parquet, CSV, JSON, Arrow и др. - 🧠 SQL как первый язык аналитики — работает из коробки - 🛠 Не требует отдельного сервера или установки СУБД 🧪 Это отличное решение для data science проектов, анализа больших логов, локальных ETL-задач и экспериментальной работы с данными. 🔍 Подробный гайд #Python #DuckDB #DataAnalytics #Pandas #SQL #ETL ➡ SQL Community | Чат0,58%
- 23 июн. 2025 г.SQL за полтора часа в одном видео! Полный базовый курс по SQL. Базы данных курс для начинающих! 00:00:00 Введение 00:02:43 Платные курсы и что изучать дальше 00:04:55 Коротко об онлайн редакторе 00:07:11 Что такое база данных 00:08:10 Что такое CRUD 00:10:05 Запрос на создание первой таблицы 00:11:57 Типы данных у атрибутов(колонок) (DATA TYPES) 00:17:26 Прописываем атрибуты(колонки) первой таблицы 00:21:07 Создаем первую таблицу (CREATE TABLE) 00:21:38 Проверка на наличие таблицы при создании (IF NOT EXISTS) 00:22:18 Запрос на удаление таблицы(DROP TABLE) 00:22:33 Проверка на наличие таблицы при удалении(IF EXISTS) 00:22:57 Запрос на добавление объекта в таблицу (INSER INTO table) 00:23:35 Запрос на чтение(получение) объектов из таблицы(SELECT * FROM table) 00:24:18 Модификаторы для атрибутов(колонок) таблицы(NOT NULL, DEFAULT, UNIQUE) 00:29:26 Изменение уже существующей таблицы(ALTER TABLE, ADD, DROP, RENAME, MODIFY COLUMN) 00:36:08 Удаление объектов из таблицы(DELETE FROM table) 00:37:06 Редактирование объекта в таблице(UPDATE table) 00:39:03 Первичный ключ(PRIMARY KEY) 00:45:37 Композиция в бд 00:50:38 "Иностранный" ключ(FOREIGN KEY) 00:57:26 Индексы в бд(INDEX) 00:59:24 Готовим данные для темы алиас, юнион и слияние таблиц 01:03:30 Слияние таблиц(INNER JOIN) 01:06:02 Слияние таблиц(LEFT JOIN) 01:06:53 Слияние таблиц(RIGHT JOIN) 01:07:26 Слияние таблиц(FULL JOIN/OUTER JOIN) и Union 01:09:04 Алиас(table AS alias) 01:12:18 Select Distinct в SQL 01:13:42 AND OR NOT в SQL 01:16:18 ORDER BY и LIMIT в SQL 01:17:35 MIN и MAX в SQL 01:18:25 COUNT SUM AVG в SQL 01:19:29 LIKE в SQL 01:21:31 IN и BETWEEN в SQL 01:22:50 GROUP BY в SQL 01:25:17 EXISTS в SQL 01:27:37 ANY и SOME в SQL 01:29:00 INSERT INTO в SQL 01:30:40 Отношения в базе данных 01:32:11 Отношения один к одному 01:33:09 Отношения один ко многим 01:34:09 Отношения многие ко многим 01:37:10 Отношения один к одному и один ко многим "через" 01:39:10 SQL инъекции источник #devops #девопс0,53%
- 10 июл.SQL-задача с подвохом посложнее Нужно найти пользователей, у которых последний заказ был оплачен. Есть таблица: orders id | user_id | status | created_at 1 | 10 | paid | 2026-01-01 2 | 10 | cancelled | 2026-01-05 3 | 20 | paid | 2026-01-03 4 | 30 | failed | 2026-01-02 Кто-то пишет так: WITH ranked AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY user_id ORDER BY created_at DESC ) AS rn FROM orders WHERE status = 'paid' ) SELECT * FROM ranked WHERE rn = 1; На вид логично. Но запрос неверный. Подвох: фильтр WHERE status = 'paid' срабатывает до ROW_NUMBER(). То есть SQL сначала выбрасывает все неоплаченные заказы, а потом ищет последний среди оставшихся оплаченных. Пользователь 10 попадёт в результат, хотя его реальный последний заказ — cancelled. Правильно так: WITH ranked AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY user_id ORDER BY created_at DESC, id DESC ) AS rn FROM orders ) SELECT * FROM ranked WHERE rn = 1 AND status = 'paid'; Сначала находим последний заказ вообще, и только потом проверяем его статус. Вот почему порядок фильтрации в SQL может полностью менять смысл запроса.0,52%
- 3 авг.Единственные соседние степени во всей математике Числа 8 и 9 выглядят обычно, но их соседство уникально: 2³ = 8 3² = 9 Это единственная пара степеней натуральных чисел больше 1, которые отличаются ровно на единицу. Иными словами, уравнение xᵖ - yᑫ = 1 при x, y, p, q > 1 имеет только одно решение: 3² - 2³ = 1 Эжен Каталан сформулировал эту гипотезу в 1844 году. Доказать её смогли лишь спустя более 150 лет: в 2002 году это сделал математик Преда Михэйлеску. Сегодня результат известен как теорема Михэйлеску. Простое утверждение оказалось настолько глубоким, что для доказательства понадобились современные методы алгебраической теории чисел.0,51%
- 24 апр.Продвинутый SQL-прием: partial index вместо “универсального” индекса Если в таблице много строк, но запрос почти всегда смотрит только активные записи, не обязательно индексировать всё. Например, есть таблица заказов: SELECT * FROM orders WHERE user_id = 42 AND status = 'active'; Обычный индекс: CREATE INDEX idx_orders_user_status ON orders(user_id, status); Работает, но он хранит данные по всем статусам: active, cancelled, archived, failed и так далее. Если чаще всего нужны только активные заказы, можно сделать partial index: CREATE INDEX idx_orders_active_user ON orders(user_id) WHERE status = 'active'; Такой индекс меньше, быстрее обновляется и лучше помещается в память. Планировщик сможет использовать его для запросов, где условие совпадает: SELECT * FROM orders WHERE user_id = 42 AND status = 'active'; Индекс не обязан покрывать всю таблицу. Иногда лучший индекс - это индекс только по тем строкам, которые реально участвуют в горячих запросах. Особенно полезно для флагов вроде deleted_at IS NULL, status = 'active', is_published = true, processed = false. #sql #postgresql #database #backend0,45%
- 11 июн.Вопрос на SQL собеседовании. Какой оператор имеет больший приоритет AND или OR (если они используются совместно)? Ответ: AND имеет больший приоритет, нежели OR #sql #собеседование0,45%
- 12 авг.🔥 9B-модель на 7 ГБ, которая по тестам автора лезет на территорию 27B На Hugging Face вышла Qwen3.5-9B The Defiant Fable от DavidAU. Это многоэтапный fine-tune Qwen3.5-9B с упором на reasoning, instruction following, код и creative-задачи. Модель распространяется под Apache 2.0, а автор также позиционирует её как uncensored/heretic-версию с минимальными отказами. Самое интересное в результатах. По собственному набору из семи бенчмарков автор заявляет, что 9B-версия обходит базовые Qwen3.5-9B, Qwen3.5-27B и Qwen3.6-35B-A3B, а местами приближается к Qwen3.6-27B. Причём сильные результаты сохраняются даже после 4-bit квантования. Это пока именно авторские тесты, а не независимый leaderboard. Для локального запуска уже готовы обычные и MTP GGUF с NEO IMATRIX. Q4_K_M занимает примерно 6,8-7 ГБ, IQ3_M около 5,6 ГБ, а экстремальный IQ2_M всего 4,94 ГБ. Контекст у базовой архитектуры до 262K токенов. Запускать можно через llama.cpp, Ollama, LM Studio, vLLM и другие локальные рантаймы, а через llama.cpp сразу поднимается OpenAI-compatible API. Если независимые тесты подтвердят цифры, это хороший пример того, насколько далеко сейчас можно вытянуть маленькую 9B-модель правильным fine-tuning, merge и квантованием. https://huggingface.co/DavidAU/Qwen3.5-9B-The-Defiant-Fable-Uncensored-Heretic-NEO-IMATRIX-MAX-MTP-GGUF #AI #Qwen #LLM #LocalAI #GGUF0,43%