#mysql #subquery
#mysql #подзапрос
Вопрос:
Я пытаюсь получить максимальный и минимальный результат заказов в день из заранее определенного диапазона.
Пример С 1 по 30 января я получил 300 заказов. Каково количество заказов в день наибольших продаж? И каков минимальный? А среднее?
Это было бы довольно просто, за исключением того, что мне нужно, чтобы это число основывалось на городе, а города относятся к результатам другого запроса.
Что у меня есть до сих пор:
select count(orderNumber) as total_order_number,
SUM(cast(REPLACE(total_value, ',', '.') as decimal(8,2))) as total_value,
avg(cast(REPLACE(total_value, ',', '.') as decimal(8,2))) as average_price,
(count(orderNumber) / 30) as average_order_number,
(select count(*) as total_orders_day from orders where date_created between date('2016-01-01') and date('2016-01-30') group by date(date_created) order by total_orders_day desc limit 1) as max_orders_day,
(select count(*) as total_orders_day from orders where date_created between date('2016-01-01') and date('2016-01-30') group by date(date_created) order by total_orders_day asc limit 1) as min_orders_day,
city
from orders o
where date_created between date('2016-01-01') and date('2016-01-30')
group by o.city
order by total_order_number DESC
limit 7
Это выдает мне результаты total_order_number, total_value, average_price, average_order_number для каждого города в порядке. Но минимальные и максимальные значения одинаковы, потому что я не знаю, как разделить результаты по городам.
Любая помощь?
Спасибо
Ответ №1:
Это кажется простым делом для подзапроса:
select city, min(numorders), max(numorders), avg(numorders)
from (select city, date(date_created) as dte, count(*) as numorders
from orders o
where date_created between date('2016-01-01') and date('2016-01-30')
group by city, date(date_created)
) d
group by city;
Комментарии:
1. Это должно разделять результаты по городам? Мне также нужны исходные столбцы. Я не думаю, что смогу использовать все это как подзапрос, потому что он содержит более одного столбца
2. @HenriqueM . . . . Я пропустил эту часть запроса. Исправлен ответ.
3. Хорошо, этот способ, кажется, работает нормально. Но другой столбец в моем запросе — «total», в котором мне нужно абсолютное количество заказов в этом диапазоне дат. Поскольку мы группируем по дате, как я могу абстрагировать объем всего диапазона? Я попытался, просто добавив count в numorder, но он возвращает номер первого дня, найденного запросом, вместо total из-за оператора group by. То же самое для ‘total_value’
4. @HenriqueM . . . . Можно отвечать только на те вопросы, которые задаются. В частности, это: «Каково количество заказов в день наибольших продаж? И каков минимальный? А среднее значение?» Если у вас есть другой вопрос, вы должны задать его как другой вопрос.
5. Извините, это было в моем исходном запросе