TGViewer
Симулейтив Симулейтив @simulative_official · 7.46K subscribers
Post #3118 1.03K
5 SQL‑ошибок и фишек, о которых редко говорят

Привет, будущие аналитики! С вами Евгений Буторин, ментор курса «Аналитик данных» и человек, который видел и писал слишком много странных SQL‑запросов, чтобы молчать об этом 😁

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

1️⃣ COUNT(*) vs COUNT(col)

Многие уверены, что COUNT(*), COUNT(1) и COUNT(имя_столбца) — одно и то же. Но это не так.

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

SELECT COUNT(email) FROM users


то получите количество заполненных имейлов. То есть если у пользователя email равен NULL, он не попадёт в подсчёт. А вот:

SELECT COUNT(*) FROM users


Или

SELECT COUNT(1) FROM users


посчитают все строки.

Используйте COUNT(имя_столбца), только если вам действительно нужно считать непустые значения, а не строки.

2️⃣ Лишние поля в GROUP BY

Например, у вас есть таблица с транзакциями клиентов, в которой есть ID клиента, ID транзакции и её размер. Вам нужно считать общее количество транзакций на клиента.

Новички часто не понимают, как работает GROUP BY и какие поля в нём указывать, поэтому часто можно встретить такое:

SELECT client_id, sum(amount) as sum_amount
FROM transactions
GROUP BY client_id, transact_id


Данный скрипт отработает, но вместо одного client_id у вас будет 10 строк (зависит от количества транзакций у клиента). Для того чтобы написать правильно, нужно указывать только те поля, которые есть в SELECT:

SELECT client_id, sum(amount) as sum_amount
FROM transactions
GROUP BY client_id


3️⃣ Неверные поля в GROUP BY

Ещё одной частой ошибкой при использовании GROUP BY является использование поля вместо условия. Например:

SELECT client_id, case when start_date >= date’2026-01-01’ then 1 else 0 end as new_client_flag, sum(amount) as sum_amount
FROM transactions
GROUP BY client_id, start_date


Этот скрипт отработает, но сгруппирует неверно. Чтобы правильно сгруппировать строки, нужно использовать всё условие:

SELECT client_id, case when start_date >= date’2026-01-01’ then 1 else 0 end as new_client_flag, sum(amount) as sum_amount
FROM transactions
GROUP BY client_id, case when start_date >= date’2026-01-01’ then 1 else 0 end


4️⃣ LIKE без %

На работе нам часто приходится искать данные в текстовых полях. Например, мы отправляем SMS клиентам, но предварительно тестируем их. Заказчик просит нас собрать воронку. Поэтому нам нужно исключить тестовые записи.

Если мы напишем:

WHERE name NOT LIKE ‘test’


То получим только строгое соответствие, и как следствие, завышенный верх воронки. Поэтому для полноценного поиска нам нужно указывать:

WHERE name NOT LIKE ‘%test%’


Процент, поставленный до и после искомого слова, позволяет выбрать данные с любым количеством символов до и после.

5️⃣ DISTINCT не лечит дубли

Очень частая ошибка: «У меня дубли, добавлю DISTINCT и всё». Но DISTINCT — это не всегда решение. Важно понимать причину дублей и использовать соответствующий метод дедупликации.

Например:

SELECT DISTINCT u.client_id, t.amount
FROM clients u
LEFT JOIN transactions t ON u.client_id = t.client_id


Если у пользователя 10 транзакций, вы получите 10 строк. DISTINCT оставит 10 строк, потому что amount разный.

Правильный подход — агрегировать, суммируя amount:

SELECT u.client_id, SUM(t.amount) AS total_amount
FROM clients u
LEFT JOIN transactions t ON u.client_id = t.client_id
GROUP BY u.client_id


А какие ошибки вы совершали в начале своего пути? Делитесь, будем учиться вместе!

📊 Simulative
  • 🔥 14
  • ❤ 10
  • 👍 4
More from @simulative_official
  1. Oct 1, 2026Post #3592
  2. Sep 30, 2026💻💻💻💻💻 Откуда на самом деле берутся данные? На учебных задачах всё просто: тебе дают г…
  3. Sep 30, 2026⭐️ Топ метрик, которые должен уметь считать каждый аналитик Рекламные метрики — это не про…
  4. Sep 29, 2026⭐️ Уже сегодня: как ML-инженер учит компьютер находить смысл в тексте Сегодня покажем проф…
  5. Sep 28, 2026#проанализировали_и_поняли
  6. Sep 27, 2026💻💻💻💻💻 Как работает ML-инженер — на примере поиска похожих текстов Пользователь вводит…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →