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

Поможете найти ошибку?

vlnvntr belembo Ученик (99), на голосовании 5 месяцев назад
Прохожу обучающие задания по SQL. Составлен запрос по заданию, но программа выдает ошибку, что, мол, получилось, но надо сделать верную сортировку и я пока что не понимаю, что не так. Помогите найти ошибку в запросе.

Задание:

Разбейте заказы из таблицы orders на 3 группы в зависимости от количества товаров, попавших в заказ:

Малый (от 1 до 3 товаров);
Средний (от 4 до 6 товаров);
Большой (7 и более товаров).
Посчитайте число заказов, попавших в каждую группу. Группы назовите соответственно «Малый», «Средний», «Большой» (без кавычек).

Выведите наименования групп и число товаров в них. Колонку с наименованием групп назовите order_size, а колонку с числом заказов — orders_count.

Отсортируйте полученную таблицу по колонке с числом заказов по возрастанию.

Поля в результирующей таблице: order_size, orders_count

SELECT
CASE
WHEN array_length(product_ids, 1) >= 7 then 'Большой'
WHEN array_length(product_ids, 1) >= 4 then 'Средний'
ELSE 'Малый'
--WHEN array_length(product_ids, 1) >= 1 AND array_length(product_ids, 1) <= 3 THEN 'Малый'
--WHEN array_length(product_ids, 1) >= 4 AND array_length(product_ids, 1) <= 6 THEN 'Средний'
--ELSE 'Большой'
END AS order_size,
COUNT(order_id) AS orders_count
FROM orders
GROUP BY order_size
ORDER BY order_size;
Голосование за лучший ответ
Юрий Петров Профи (587) 6 месяцев назад
я не эксперт, но возможно:
Условия в блоке CASE перекрываются. Условие WHEN array_length(product_ids, 1) >= 7 then 'Большой' будет выполняться для заказов с 7 и более товарами, а также для заказов с 4 и более товарами, так как второе условие WHEN array_length(product_ids, 1) >= 4 then 'Средний' идет позже.
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (263720) 6 месяцев назад
 SELECT 
CASE
WHEN order_items_count BETWEEN 1 AND 3 THEN 'Малый'
WHEN order_items_count BETWEEN 4 AND 6 THEN 'Средний'
ELSE 'Большой'
END AS order_size,
COUNT(*) AS orders_count
FROM
(
SELECT
order_id,
COUNT(*) AS order_items_count
FROM
order_items
GROUP BY
order_id
) AS subquery
GROUP BY
order_size
ORDER BY
orders_count;
Похожие вопросы