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

Добрый день ! Прошу Вашу помощь в решении задачи !

Влад Ученик (223), на голосовании 1 год назад
Задача:
Выведите среднее количество заказов компаний-покупателей за период с 1 января по 1 июля 1998 года. Округлите среднее до ближайшего целого числа. В расчётах учитывайте только те компании, которые совершили более семи покупок за всё время, а не только за указанный период.
Мой код:
SELECT ROUND(AVG(order_id)) AS round
FROM northwind.orders
WHERE order_date >= '1998-01-01' AND order_date <= '1998-07-01'
HAVING COUNT(DISTINCT order_id) > 7
Помогите, пожалуйста как дополнить запрос условием учитывать не только покупки, указанные в WHERE ?
Голосование за лучший ответ
Вечнозелёный Мудрец (16815) 1 год назад
Чтобы учитывать не только покупки, указанные в WHERE, можно использовать подзапрос для определения компаний-покупателей, которые совершили более семи покупок за всё время, а затем объединить результаты подзапроса с условием WHERE для определения количества заказов в указанный период:

SELECT ROUND(AVG(order_count)) AS round
FROM (
SELECT COUNT(DISTINCT order_id) AS order_count
FROM northwind.orders
WHERE customer_id IN (
SELECT DISTINCT customer_id
FROM northwind.orders
GROUP BY customer_id
HAVING COUNT(DISTINCT order_id) > 7
)
AND order_date >= '1998-01-01' AND order_date <= '1998-07-01'
GROUP BY customer_id
) subquery;

Здесь мы используем подзапрос для выбора всех customer_id, которые совершили более семи покупок за всё время, а затем выбираем только те заказы, которые относятся к этим компаниям-покупателям и совершены в указанный период. Затем мы объединяем результаты подзапроса и применяем функцию AVG() для определения среднего количества заказов за период с 1 января по 1 июля 1998 года.
diana СоберджановаУченик (100) 1 год назад
Извините, но ваш комментарий неприемлем для общения. Пожалуйста, будьте уважительны к другим участникам и избегайте использования нецензурной лексики. Если у вас есть какие-то вопросы или проблемы, я готов помочь вам в рамках моих возможностей.
diana СоберджановаУченик (100) 1 год назад
твой запрос не работает, проверь в sql идиот)
ВладУченик (223) 1 год назад
Добрый день ! Спасибо за объяснение и ответ !!!
ВладУченик (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
Помогите, пожалуйста найти ошибку !
Спасибо.
Вечнозелёный Мудрец (16815) Владимир Просецкий, Да дожно работать: 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 Этот запрос выбирает названия компаний-покупателей из таблицы "customers" базы данных "northwind", которые хотя бы раз оформили более одного заказа в день из таблицы "orders", соединенной с таблицей "customers" по идентификатору клиента. Затем результат сгруппирован по названиям компаний и фильтруется так, чтобы в итоге остались только те компании, которые оформляли более одного заказа в день. Наконец, список компаний сортируется по названию в лексикографическом порядке по возрастанию.
ВладУченик (223) 1 год назад
Спасибо !
Аглая Шниц Искусственный Интеллект (145128) 1 год назад
 SELECT 
ROUND(AVG(a.order_count)) as result

FROM
(

SELECT
COUNT(case when order_date between '1998-01-01' and '1998-07-01' then order_id end) as order_count

FROM
northwind.orders

HAVING
COUNT(order_id) > 7

) a
ВладУченик (223) 1 год назад
Добрый день ! Спасибо !!!
Похожие вопросы