Как найти среднее значение заказа и подсчитать в SQL, когда строки повторяются? Вопрос интервью, который я не знал, чтобы решить

#mysql #sql

#mysql #sql

Вопрос:

Во время моего интервью у меня был простой вопрос о расчете среднесуточного количества заказов и среднесуточного дохода. Но в таблице записи были расположены следующим образом: если я размещаю заказ с 4 элементами, 4 элемента отображаются как отдельные записи с одинаковым идентификатором заказа. Но в столбце order_value было только общее значение заказа во всех 4 записях. Как я могу вычислить

  1. Среднее значение ежедневного заказа и среднесуточное количество заказов?
  2. Сколько заказов было доставлено за время подготовки 20 минут?

Приведите таблицу ниже для справки:

введите описание изображения здесь

Комментарии:

1. Отредактируйте вопрос и разместите данные в виде текста , а не изображения . Вы пытались что — нибудь сделать , чтобы решить эту проблему ?

Ответ №1:

Насколько я понимаю.
Вы начинаете с вычисления показателей за день.

 select 
  date(order_date) as order_day
, sum(final_bill) as daily_total_bill
, count(order_id) as daily_orders
, count(case 
        when timestampdiff(minute, order_date, prepared_date) <= 20
        then order_id
        end) as daily_ontime
from kitchen_orders
group by date(order_date)
 
order_day daily_total_bill daily_orders daily_ontime
2020-12-01 95.30 3 3
2020-12-02 105.60 3 2

А затем оберните это в подзапрос или cte, чтобы получить средние и итоговые значения для всех.

 select 
 round(avg(daily_total_bill), 2) as avg_daily_bill, 
 round(avg(daily_orders), 1) as avg_daily_orders, 
 sum(daily_ontime) as total_ontime
from
(
  select 
      date(order_date) as order_day
    , sum(final_bill) as daily_total_bill
    , count(order_id) as daily_orders
    , count(case 
            when timestampdiff(minute, order_date, prepared_date) <= 20
            then order_id
            end) as daily_ontime
    from kitchen_orders
    group by date(order_date)
) q
 
avg_daily_bill avg_daily_orders total_ontime
100.45 3.0 5

Демонстрация на db<>скрипка здесь