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

Помочь в решении задания.

Влад Ученик (223), на голосовании 1 год назад
Задание:
Выведите на экран названия компаний-покупателей, которые хотя бы раз оформили более одного заказа в день. Для подсчёта заказов используйте поле order_date. Отсортируйте названия компаний в лексикографическом порядке по возрастанию.
Код:
SELECT c.company _name
FROM northwind.customers AS c
LEFT JOIN northwind.orders AS o ON c.customer_id = o.customer_id
GROUP BY 1
HAVING COUNT(DISTINCT o.order_date) > 1
ORDER BY 1 ASC

Помогите найти ошибку в коде.
Голосование за лучший ответ
P̲u̲t̲ i̲n̲ Мудрец (15413) 1 год назад
Код, который вы предоставили, имеет некоторые ошибки. Вам нужно убедиться, что считаете количество заказов, сделанных в один и тот же день, а не просто уникальные даты заказов. Для этого вам нужно будет сначала агрегировать данные о заказах на уровне даты и компании-покупателя, а затем отфильтровать те компании, которые имеют более одного заказа в один день. Вот исправленный код:
 WITH daily_orders AS ( 
SELECT
c.company_name,
o.order_date,
COUNT(o.order_id) AS num_orders
FROM
northwind.customers AS c
LEFT JOIN northwind.orders AS o ON c.customer_id = o.customer_id
GROUP BY
c.company_name,
o.order_date
)

SELECT
company_name
FROM
daily_orders
WHERE
num_orders > 1
GROUP BY
company_name
ORDER BY
company_name ASC;
Этот код создает временное представление (CTE) с именем daily_orders, где агрегируются заказы по компаниям и датам. Затем выбираются названия компаний с более чем одним заказом в день и сортируются в лексикографическом порядке по возрастанию.
ВладУченик (223) 1 год назад
Добрый день ! Спасибо за Вашу помощь и развернутый ответ !
Похожие вопросы