#mysql #sql
#mysql #sql
Вопрос:
Во время моего интервью у меня был простой вопрос о расчете среднесуточного количества заказов и среднесуточного дохода. Но в таблице записи были расположены следующим образом: если я размещаю заказ с 4 элементами, 4 элемента отображаются как отдельные записи с одинаковым идентификатором заказа. Но в столбце order_value было только общее значение заказа во всех 4 записях. Как я могу вычислить
- Среднее значение ежедневного заказа и среднесуточное количество заказов?
- Сколько заказов было доставлено за время подготовки 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<>скрипка здесь