TGViewer
SQL и Анализ данных SQL и Анализ данных @databases_tg · 12.5K subscribers
Post #1089 3.38K
🖥 SQL-задача с подвохом: почему запрос работает не так, как ожидаешь?

🧠 Условие:

Есть таблица orders:

| id | customer_id | total |
|----|-------------|--------|
| 1 | A | 100.00 |
| 2 | A | 200.00 |
| 3 | B | 150.00 |
| 4 | B | 300.00 |
| 5 | C | 400.00 |


Нужно выбрать заказ с максимальной суммой (`total`) для каждого клиента.

Вы пишете:


SELECT customer_id, MAX(total)
FROM orders
GROUP BY customer_id;


✅ Работает? Да. Но теперь вы хотите вернуть всю строку заказа с максимальной суммой — включая id.

Вы пишете:


SELECT *
FROM orders
GROUP BY customer_id
HAVING total = MAX(total);


❌ Ошибка. Или — неожиданные результаты.

📌 Подвох: нельзя использовать HAVING total = MAX(total) без подзапроса.
MAX — агрегат, а total вне GROUP BY — это ошибка или неопределённость.

✅ Правильное решение — с подзапросом:


SELECT o.*
FROM orders o
JOIN (
SELECT customer_id, MAX(total) AS max_total
FROM orders
GROUP BY customer_id
) t ON o.customer_id = t.customer_id AND o.total = t.max_total;


💡 Такое решение:

🟢Возвращает всю строку заказа с максимальной суммой
🟢Работает корректно даже при одинаковых суммах у нескольких заказов
🟢Избегает путаницы с агрегатами в основном SELECT

🧠 Вывод:
Нельзя просто так использовать MAX() и при этом возвращать столбцы вне GROUP BY.
Для этого всегда нужен JOIN с агрегатом или window-функции.
  • 👍 11
  • ❤ 1
  • 🔥 1
  • 💊 1
More from @databases_tg
  1. Oct 2, 2026Как SQLite превращает числа в текст в 2 раза быстрее? Трюк с парами цифр Обычно число пере…
  2. Oct 2, 2026В субботу, 17 октября, Москва станет точкой притяжения для всех специалистов в области Rec…
  3. Oct 1, 2026Жиз
  4. Sep 30, 2026📝 5 уровней ИИ-агентов: от промпта до продакшена Context, loop, Jev, harness и evals: раз…
  5. Sep 26, 2026UPDATE — оператор обновления данных в MySQL 🗂️ Если в таблице нужно изменить значение в у…
  6. Sep 25, 2026🧠 SQL-задача с подвохом Есть таблица транзакций: CREATE TABLE transactions ( id int PRIMA…
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 →