Mysql — использовать результат другого запроса внутри подзапроса

#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. Извините, это было в моем исходном запросе