TGStat
TGStat
Qidiruv uchun matnni kiriting
Ilg‘or kanal qidiruvi
  • flag Uzbek
    Sayt tili
    flag Russian flag English flag Uzbek
  • Saytga kirish
  • Katalog
    Kanal va guruhlar katalogi Hududiy to‘plamlar Tematik to‘plamlar Платные каналы Kanallar qidiruvi
    Kanal/guruh qo‘shish
  • Reytinglar
    Kanallar reytingi Guruhlar reytingi Postlar reytingi
    Brendlar va shaxslar reytingi
  • Analitika
  • Postlarda qidiruv
  • Telegram'ni kuzatish
  • Targ‘ibot
    Yandex Business orqali reklama TGStat Agency orqali kanallarda reklama TGStat.ru saytida reklama
Дима SQL-ит 🧑‍💻 (Аналитика данных, AI)

29 Jun, 13:04

Telegram'da ochish Ulashish Shikoyat qilish

00:32
Video oldindan ko‘rish uchun mavjud emas
Telegram'da ko‘rish
🗂 Порядок выполнения sql запроса — и почему алиас в WHERE не работает:

Часто вижу одну и ту же ошибку — человек пишет запрос, придумывает алиас в SELECT, а потом пытается использовать его в WHERE или HAVING. И получает ошибку. Почему?

Всё дело в порядке выполнения SQL.
На самом деле SQL выполняется совсем не в том порядке, в котором мы его пишем. Вот реальная последовательность:

1️⃣ FROM — сначала движок идёт к таблицам
2️⃣ JOIN
 — потом движок соединяет таблицы
2️⃣ WHERE — фильтрует строки до группировки
3️⃣ GROUP BY — группирует данные
4️⃣ HAVING — фильтрует уже сгруппированные данные
5️⃣ SELECT — только сейчас вычисляются выражения и алиасы
6️⃣ ORDER BY — сортировка результата
7️⃣ LIMIT — обрезание до нужного числа строк

Пример 1 — классическая ошибка с алиасом:
-- ❌ Не работает — алиас revenue ещё не существует на шаге WHERE
SELECT
order_id,
amount * 0.9 AS revenue
FROM orders
WHERE revenue > 1000;

-- ✅ Правильно — повторяем выражение напрямую
SELECT
order_id,
amount * 0.9 AS revenue
FROM orders
WHERE amount * 0.9 > 1000;

Пример 2 — почему HAVING, а не WHERE:
-- ❌ Нельзя — WHERE выполняется ДО GROUP BY
SELECT
user_id,
COUNT(*) AS order_count
FROM orders
GROUP BY user_id
WHERE order_count > 5;

-- ✅ Правильно — HAVING фильтрует после группировки
SELECT
user_id,
COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5;

Пример 3 — вот почему все пишут CTE:
Иногда хочется сначала что-то посчитать, а потом фильтровать по результату. Именно для этого и придумали CTE — они позволяют «сохранить» промежуточный результат и работать с ним как с таблицей.
-- ✅ CTE решает проблему: сначала считаем, потом фильтруем
WITH revenue_calc AS (
SELECT
order_id,
amount * 0.9 AS revenue
FROM orders
)
SELECT *
FROM revenue_calc
WHERE revenue > 1000;

Видите? В CTE SELECT уже выполнился — алиас revenue существует — и теперь во внешнем запросе WHERE отрабатывает по нему без проблем.

Итог: 🤩

❤️ Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)
❓ Сталкивались с этой ошибкой? Или, может, объясняете это джунам — как объясняете? Пишите в комментах!
✔️ Подпишитесь на канал, чтобы не пропустить следующие хаки.


🚬 Вопросы, обучение, консультации: Написать в ЛС | mentor.dima-sqlit.ru


@dima_sqlit

1.9k 1 26 15 27
Katalog
Kanal va guruhlar katalogi Kanallar to‘plamlari Kanallar qidiruvi Kanal/guruh qo‘shish
Reytinglar
Telegram-kanallar reytingi Telegram-guruhlar reytingi Postlar reytingi Brendlar va shaxslar reytingi
API
Statistika API'si Postlar qidiruvi API'si API Callback
Kanallarimiz
@TGStat @TGStat_Chat @telepulse @TGStatAPI
O‘qish
Академия TGStat Telegram tadqiqoti 2019 Telegram tadqiqoti 2021 Telegram tadqiqoti 2023
Kontaktlar
Справочный центр Qo‘llab-quvvatlash Email Vakansiyalar
Har xil narsalar
Foydalanuvchi shartnomasi Maxfiylik siyosati Ommaviy oferta
Botlarimiz
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot