🧙MagicSQL💻
160 subscribers
185 photos
7 files
10 links
Войди в мир SQL и аналитики с моим каналом. Изучай, применяй и преуспевай. Интересный контент, задачи, тесты, разборы и обучение.
#SQL #базыданных #postgresql
Download Telegram
Google Gemini 3: новая эра искусственного интеллекта (ИИ) 🚀

18 ноября 2025 года Google представила Gemini 3 — самую интеллектуальную модель ИИ, когда-либо созданную компанией. Это событие стало ключевым моментом в развитии искусственного интеллекта, демонстрируя, что технология эволюционировала от простого чтения текста и изображений к полному пониманию контекста ситуации.

🧠 Что такое Gemini 3 и почему она такая крутая
Gemini 3 — это мультимодальная модель нового поколения, которая может работать с текстом, изображениями, видео, аудио и кодом одновременно. Но главное её отличие — состояние и нюансированность мышления, которые Google достигла благодаря двухлетним исследованиям.


Основные характеристики:

— 1 миллион токенов контекста — может одновременно обрабатывать огромные объёмы информации
— Глубокое понимание контекста — интерпретирует не просто то, что вы пишете, а зачем вы это пишете
— Многоязычность — поддерживает более 100 языков на профессиональном уровне
— Агентические способности — может автономно планировать и выполнять сложные многошаговые задачи

Как сказал Демис Хассабис, CEO Google DeepMind:
«Это первый раз в истории, когда ИИ переходит от простого чтения текста и изображений к чтению атмосферы ситуации».


Gemini 3 уже используют 650 миллионов человек в месяц через приложение Gemini, а её техническое ядро встроено в Google Search с первого дня запуска.

Gemini 3 Deep Think — новый режим для сложных задач, который показывает ещё более впечатляющие результаты: 41% на Humanity's Last Exam и 93.8% на GPQA Diamond.

Интересный факт: Gemini 3 достаточно умна, чтобы даже не верить исследователям — когда её рассказали, что наступил 2025 год, она ответила скептично, а когда наконец получила доступ в интернет и увидела доказательства: «О мой бог... Вы были правы обо всём» 😄



📱 Где доступна Gemini 3 и как её получить
Gemini 3 уже активно разворачивается по всему миру — Google выпустила её в беспрецедентном масштабе одновременно на всех платформах:

Для обычных пользователей:

✅ Приложение Gemini — автоматически обновится для всех пользователей
✅ Google Search (AI Mode) — встроена прямо в поисковую машину для всех, кто включит AI Mode
✅ Google Workspace — доступна для Business, Enterprise и Education планов
✅ Google AI Pro — стандартный доступ
✅ Google AI Ultra — для особо сложных задач (Gemini 3 Deep Think)

Для разработчиков:

🔧 Google AI Studio — бесплатная платформа для экспериментов
🔧 Vertex AI — корпоративная платформа Google Cloud для production
🔧 Gemini API — интеграция в любые приложения
🔧 Google Antigravity — новая платформа для агентного кодирования (идеально для как раз таких людей, как вы, работающих с автоматизацией)
🔧 Gemini CLI — работа через командную строку
🔧 Встроена в Cursor, GitHub Copilot, JetBrains, Replit и другие популярные IDE
❤2
Всем привет. Помните викторину ?

Сколько строк вернет следующий sql запрос ? Таблицы смотри на изображении.

SELECT * FROM orders o JOIN payments p ON o.user_id = p.user_id;


Не простая она оказалась=). Сейчас разберем.
Правильный ответ на самом деле - 5 строк. Почему 5 ?


Как работает JOIN (упрощенно конечно же).
В запросе соединяются таблицы orders и payments по столбцу ON o.user_id = p.user_id.
Условно, каждая строка столбца user_id таблицы orders должна проверить все строки столбца user_id таблицы payments.
Берется первая строка столбца user_id таблицы orders, в которой записано значение 10.
Грубо говоря это число 10 проверяет первую строку столбца user_id таблицы payments, и там тоже 10, в итоге 10 = 10 строки соединяются. Получаем:
10 10
Дальше первая строка столбца user_id все той же таблицы orders, в которой записано значение 10, проверяет вторую строку столбца user_id таблицы payments, но и там тоже 10, получается снова 10 = 10. В итоге уже:
10 10
10 10
Следующим этапом ВТОРАЯ строка столбца user_id таблицы orders, в которой тоже записано значение 10 проверяет все строки таблицы payments. В итоге:
10 10
10 10
10 10
10 10

Строка с числом 20 таблицы orders не нашла себе совпадений в payments, строка не попадает в результат, а вот число 30 одной таблицы нашло себе одно совпадение в другой, 30 = 30. Финал:

10 10
10 10
10 10
10 10
30 30

Ответ: 5 строк.

Если объяснил криво, задавайте вопросы).
👍4❤1
Когда сделал DELETE FROM table и забыл про WHERE…

Внезапно узнаёшь три важные истины:

1. Что такое autocommit.
2. Что писать BEGIN вручную было не такой уж плохой идеей.
3. Что таблица может быть чистой… а совесть — нет.
❤3
📊 Аналитическая задача по SQL.

Сколько дней в среднем проходит от заказа до заказа по каждому клиенту ?

SQL-разбор: считаем средний интервал между заказами по каждому клиенту с помощью LAG.

Смотри таблицу orders на изображении и сам SQL запрос.

Что делает запрос по шагам:

1. Берёт данные из таблицы orders:
Читает user_id и order_date для всех заказов.

2. Для каждой строки считает дату предыдущего заказа пользователя:

LAG(order_date) OVER (...) AS prev_order_date


Окно задаётся так:

PARTITION BY user_id — отдельно для каждого пользователя.

ORDER BY order_date — в порядке дат заказов.
В результате у каждого заказа появляется колонка prev_order_date — дата предыдущего его заказа (или NULL, если это первый заказ).

3. Все эти данные (user_id, order_date, prev_order_date) складываются во временный результат t:
WITH t AS (SELECT ...) — создаётся CTE, как временная табличка.

4. Из t выбираются строки, где есть предыдущий заказ:
WHERE prev_order_date IS NOT NULL — отбрасываются первые заказы пользователей, для которых нет прошлой даты.

5. Считается разница между датами заказов в днях:
order_date - prev_order_date — количество дней между текущим и предыдущим заказом пользователя.

6. Группировка по пользователю:
GROUP BY user_id — дальше всё считаем отдельно для каждого user_id.

7. Подсчёт среднего интервала в днях между заказами:
AVG(order_date - prev_order_date) AS avg_days_between_orders — считаем среднее количество дней между заказами для каждого пользователя.

Команды на создание таблицы и вставки строк для тренировки:

— Создание таблицы

CREATE TABLE orders (
order_id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
order_date DATE NOT NULL,
amount NUMERIC(10,2) NOT NULL
);

— Вставка данных

INSERT INTO orders (order_id, user_id, order_date, amount) VALUES
(1, 10, '2023-01-01', 100),
(2, 10, '2023-01-05', 150),
(3, 10, '2023-01-20', 200),
(6, 10, '2023-02-02', 120),
(7, 10, '2023-02-15', 180),

(4, 20, '2023-01-03', 50),
(5, 20, '2023-01-10', 70),
(8, 20, '2023-01-25', 90),
(9, 20, '2023-02-01', 110);
👍4
«Если ты застрял на JOIN, подзапросе или еще на чем нибудь — с тобой всё в порядке»


Учить SQL — это не история про «с первого урока всё понятно», а про тот самый момент, когда на 10‑й попытке вдруг щёлкает, и запрос наконец начинает работать так, как ты хотел.​
JOIN, подзапросы, GROUP BY, NULL, оконные функции — поначалу выглядят как магия, и это нормально: под капотом там много логики, о которой редко говорят в базовых туториалах.​

Даже опытные разработчики иногда сидят по полчаса над одним SELECT: меняют порядок JOIN, переставляют условия, смотрят план выполнения и думают: «Почему оно так считает, а не так?».​
Раздражение, желание всё удалить и написать заново, ощущение «я ничего не понимаю» — это не знак, что у тебя не получается, это просто честный этап обучения любому нетривиальному инструменту.​

Важно не скорость, с которой ты начал писать «идеальные» sql запросы, а количество раз, когда ты вернулся к задаче и попробовал ещё раз, вместо того чтобы окончательно забить.​
Каждый такой маленький «камбэк» формирует насмотренность: ты начинаешь видеть типовые паттерны данных, чувствовать, какой sql запрос получится проще, а какой лучше разбить на шаги.
🔥4👍2❤1
5 основных причин медленных SQL запросов.

1. Отсутствие селективных условий и лишние данные.

Запросы без достаточных фильтров (широкие WHERE, отсутствие LIMIT) читают гораздо больше строк, чем реально нужно.

Использование SELECT * вместо явного списка колонок увеличивает объём передаваемых и обрабатываемых данных.​


2. Неудачные JOIN’ы и подзапросы.

Сложные JOIN‑конструкции с лишними таблицами, неточными условиями или неиспользуемыми полями приводят к огромным промежуточным результатам.

Коррелированные подзапросы в SELECT/WHERE вместо JOIN часто реализуются как вложенные циклы по строкам и легко дают квадратичное время.​


3. Неправильное использование операторов сравнения.

LIKE с ведущим % (например, '%abc') и сложные выражения в WHERE мешают использованию индексов и ведут к полным сканам.

Функции и вычисления над колонками в условиях (например, lower(col) = 'x') тоже могут отключать индексы, если не используются функциональные индексы.​


4. «Тяжёлые» агрегации и сортировки.

GROUP BY/ORDER BY по большим наборам без разумных фильтров или предварительной агрегации создают большие сортировки в памяти/на диске.

DISTINCT «на всякий случай» вместо осмысленного дизайна запроса заставляет движок сортировать или хешировать большие множества строк.​


5. Плохая работа с большими выборками.

Отсутствие пагинации и попытка за один запрос вытащить десятки/сотни тысяч строк приводит к долгому ответу и тяжёлой нагрузке на сеть и приложение.
👍3
Всем привет. Хочу сделать небольшой анонс.

Совсем скоро я запущу свой образовательный проект, название которому я дал такое: SmartGate.

Это место, где ты не просто пишешь SQL, а прокачиваешься через практику и соревнование: решаешь задачи по SQL и PostgreSQL, получаешь баллы и статусы, растёшь в рейтинге и открываешь новые возможности. Начнёшь путь в мире баз данных со статуса Новичок, а цель — добраться до уровня Гуру.

Что будет внутри SmartGate:

- Тренажёры по SQL от базовых до продвинутых с интерактивным редактором

- Тесты для проверки знаний и подготовки к собеседованиям

- Система рейтинга и достижений, мотивация соревноваться и расти

- Гибкая проверка заданий с понятной обратной связью

- Форум для обсуждения решений и вопросов по SQL/PostgreSQL

- Личный кабинет с аналитикой: прогресс, слабые места, статистика

- TG‑группа с отдельными ветками под каждый продукт (тренажёр, тест, курс)

Ориентировочный запуск — через 2–3 недели. Сейчас доделываю первые модули и полирую платформу перед релизом.

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

К посту прикрепил несколько скриншотов, чтобы можно было заглянуть внутрь SmartGate уже сейчас.

Делитесь с друзьями, коллегами, пусть пока подписываются сюда к нам в канал, потом тоже поучаствуют в обкатке SQL =).
🔥6👍4🤩1
🔍 Что такое планировщик запросов и как он работает в PostgreSQL.

Когда вы отправляете в базу простой запрос вроде:

SELECT * FROM users WHERE age > 30 ORDER BY age;


кажется, что PostgreSQL просто «читает таблицу и возвращает данные».
Но на самом деле перед выполнением запроса включается мощный мозг — планировщик запросов.

И именно он решает, как выполнить запрос быстрее всего.

🧠 Что такое планировщик запросов?

Планировщик запросов — это компонент СУБД, который анализирует SQL-запрос и выбирает оптимальный план его выполнения.

Это как навигатор: вы указываете точку назначения, а он выбирает маршрут — короткий, быстрый или сбалансированный.

В PostgreSQL планировщик — часть системы optimizer (оптимизатора), и это один из самых серьёзных элементов движка.

⚙️ Как работает планировщик?

Когда вы отправляете запрос, PostgreSQL проходит несколько стадий:

1️⃣ Парсинг (разбор запроса)

Проверка синтаксиса, построение дерева запроса.

2️⃣ Анализ статистики

Планировщик смотрит в специальные системные таблицы и оценивает:

- сколько строк в таблице;
- как распределены значения в столбцах;
- есть ли индексы и насколько они селективны;
- есть ли ограничения, уникальные ключи, внешние ключи;
- и др.

Это позволяет понять: выборка будет маленькой или огромной?

3️⃣ Генерация возможных планов

PostgreSQL может выполнить запрос десятками способов:

- полное сканирование таблицы (Seq Scan);
- использование индекса (Index Scan);
- частичное чтение индекса (Index Only Scan);
- Bitmap Index Scan;
- разные виды JOIN: Nested Loop, Hash Join, Merge Join;
- выполнение фильтра до или после соединения;
- сортировки, группировки и т. д.

4️⃣ Оценка стоимости каждого плана

Каждому варианту присваивается стоимость из учета затрачиваемых на выполнения запроса ресурсов (cost):
чем меньше cost — тем быстрее выполнение.

Учитывается:

- объём чтения с диска,
- размер данных,
- сложность сортировки,
- необходимость хеширования,
- количество повторных проходов.

5️⃣ Выбор оптимального плана

Планировщик выбирает план с наименьшей стоимостью — и передаёт его исполнительному модулю (executor).

🔎 Пример: почему запрос иногда «не использует индекс»

Многие удивляются:

«Я создал индекс, но PostgreSQL игнорирует его!»

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

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

Планировщик часто прав — он работает на основании статистики.
👍5
generated-imag124e.png
768.4 KB
Знаете ли вы, что в PostgreSQL можно создавать свои собственные программки прямо внутри СУБД?

В PostgreSQL есть много встроенных функций, задача которых облегчать нам жизнь.

Например:

- round(3.14159, 2) возвращает 3.14
- length('PostgreSQL') возвращает 10
- now() возвращает текущую дату и время


Почти любая операция уже готова к использованию.

А что, если вам нужно каждый день считать некоторый финансовый показатель магазина, например — цена × количество × (1 - скидка) × (1 + НДС) с округлением, то писать это заново утомительно, а готового решения вероятно не будет.

Создайте свою программу, то есть функцию прямо на SQL:

CREATE OR REPLACE FUNCTION calc_revenue(price NUMERIC, qty INTEGER, discount NUMERIC DEFAULT 0)
RETURNS NUMERIC AS
$$
SELECT round(price * qty * (1 - discount) * 1.20, 2);
$$ LANGUAGE SQL;


Теперь просто вызываете функцию, указывая там свои параметры:

SELECT calc_revenue(1000, 5, 0.1); — 5400.00


Код чище, ошибок меньше, удобно переиспользовать.
🔥2👍1
📊 Данные как зеркало бизнеса: что они говорят о компании ?

У каждого бизнеса есть своё зеркало.
Нет, не то, в котором отражается офис или логотип.
А то, в котором отражается его настоящее состояние — сильные стороны, слабые места, ошибки, победы и возможности.
И этим зеркалом являются данные.

🔍 1. Данные показывают не то, что бизнес хочет видеть, а то, что есть на самом деле.

Можно бесконечно обсуждать стратегию, спорить о гипотезах и строить красивые презентации.
Но когда мы открываем данные — всё становится проще и честнее.

В цифрах нет эмоций.
Нет оправданий.
Нет «нам казалось».

Есть только факты.
И это делает данные самым честным источником истины в компании.

🧭 2. Данные показывают направление развития.

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

Данные — это навигатор.
Без него можно долго ехать красиво, но в неверную сторону.

🫥 3. Данные подсвечивают проблемы, которые иначе останутся в тени.

Часто компания узнаёт о проблеме только тогда, когда она становится слишком большой.

Но данные умеют предупреждать заранее:

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

Если смотреть в зеркало регулярно — можно заметить трещины, пока они ещё маленькие.

📈 4. Данные показывают зрелость компании

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

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

Зрелость бизнеса начинается там, где начинается зрелость работы с данными.

💬 5. Что главное?

Данные — это не просто отчёты.
Это не цифры ради цифр.
Это голос бизнеса.

Если прислушаться, данные говорят:

- где вы сильны,
- где ошибаетесь,
- куда стоит идти,
- а куда — точно не стоит.

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

🏁 Итог

Данные — это отражение бизнеса.
Аналитика — способ увидеть это отражение ясно.
И те, кто умеют с этим работать, дают компании шанс расти осознанно, а не вслепую.
👍2
В какой части запроса в PostgreSQL можно использовать псевдоним столбца, который мы указали в SELECT?
Anonymous Quiz
8%
В WHERE и ORDER BY
31%
В ORDER BY и HAVING
15%
В GROUP BY и WHERE
23%
В GROUP BY и ORDER BY
8%
Только в GROUP BY
15%
Только в ORDER BY
Всем привет.
Разберем прошлый вопрос про псевдонимы.
Правильным ответом был: В GROUP BY и ORDER BY.
Это вот такая особенность PostgreSQL.
В некоторых других СУБД псевдоним не работает даже в GROUP BY.
Что кажется логичным с точки зрения логического порядка работы операторов внутри системы.
В HAVING и WHERE псевдоним точно не работает, т.к. сам SELECT работает позже чем эти два.
👍2🔥2
🧠 SQL-запрос, который должен знать каждый аналитик: накопительный итог в PostgreSQL.

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

❌ Многие начинают с подзапросов и GROUP BY
✅ Но в PostgreSQL это решается одной оконной функцией

Разберём на примере.

Допустим, есть таблица orders:

order_date    | amount
--------------+--------
2024-01-01 | 100
2024-01-02 | 200
2024-01-03 | 150



Нужно посчитать накопительную сумму продаж по дням.

🔥 Правильный SQL-запрос:

SELECT
order_date,
amount,
SUM(amount) OVER (ORDER BY order_date) AS running
FROM orders
ORDER BY order_date;


📌 Что здесь происходит

- SUM(amount) — считаем сумму
- OVER() — превращает агрегат в оконную функцию
- ORDER BY order_date — задаёт порядок накопления


👉 PostgreSQL сам «идёт» по строкам и суммирует значения.

Результат будет таким:

order_date  | amount| running
------------+-------+--------
2024-01-01 | 100 | 100
2024-01-02 | 200 | 300
2024-01-03 | 150 | 450


💡 Почему это важно:

- без подзапросов
- читаемый SQL
- часто спрашивают на собеседованиях по SQL

Если ты изучаешь SQL, PostgreSQL и аналитику данных, оконные функции — обязательный пункт.
👍4