Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

SQL создание поля с категорией

тоня Ученик (28), на голосовании 11 месяцев назад
Создайте новое поле с категориями:
заказы на сумму меньше одного доллара получат категорию 'low cost';
заказы на сумму от одного доллара и выше получат категорию 'high cost'.
Для каждой категории посчитайте сумму значений в поле total, но только для тех заказов, при оформлении которых указан почтовый код. В итоговую таблицу должны войти только два поля.
Голосование за лучший ответ
Кирилл Демченко Ученик (165) 1 год назад
SELECT
CASE
WHEN total < 1 THEN 'low cost'
ELSE 'high cost'
END,
SUM(total)
FROM invoice
WHERE billing_postal_code IS NOT NULL
GROUP BY
CASE
WHEN total < 1 THEN 'low cost'
ELSE 'high cost'
END;
Иван ЛариковУченик (121) 1 год назад
Кирилл, добрый день. Не могу понять почему у меня в отличие от твоего кода в результате добавляется еще одна строчка к двум с low и high?

SELECT SUM(total)
CASE
WHEN total < 1 AND billing_postal_code IS NOT NULL THEN 'low cost'
WHEN total >= 1 AND billing_postal_code IS NOT NULL THEN 'high cost'
END
FROM invoice
GROUP BY CASE
WHEN total < 1 AND billing_postal_code IS NOT NULL THEN 'low cost'
WHEN total >= 1 AND billing_postal_code IS NOT NULL THEN 'high cost'
END
Владимир Сергеевич Ученик (102) Иван Лариков, Потому что в конструкции CASE ты указываешь только случаи без почтового кода (billing_postal_code IS NOT NULL), соответственно случаи с почтовым кодом будут выведены отдельной строкой. Правильнее указывать условие через WHERE
Кирилл ДемченкоУченик (165) 1 год назад
Вариант с фильтрацией по условию WHERE на мой взгляд более понятен и эффективен.
Владимир СергеевичУченик (102) 4 недели назад
Точно, спасибо. Я догадывался, что ругается на порядок столбцов в ответе, но не знал как поменять. Оказывается выводимую функцию можно указывать после конструкции CASE. Такого в теории не было, но можно было бы и догадаться.
Владимир Сергеевич Ученик (102) 4 недели назад
Потому что в конструкции CASE ты указываешь только случаи без почтового кода (billing_postal_code IS NOT NULL), соответственно случаи с почтовым кодом будут выведены отдельной строкой. Правильнее указывать условие через WHERE
Похожие вопросы