среднее значение, количество, группировка по запросу - PullRequest
0 голосов
/ 15 февраля 2019

Я занимаюсь разработкой веб-приложения для системы бронирования.После того, как пользователь совершил бронирование, он переходит к этой таблице.

id  | Promo_code | total | arrival_date | departure_date | booked_date
1   | ABC1       | 1000  | 2019-02-06   | 2019-02-10     | 2019-02-02
2   | ABC1       | 2500  | 2019-02-07   | 2019-02-11     | 2019-02-03
3   | ABC1       | 3000  | 2019-02-12   | 2019-02-15     | 2019-02-03
4   | ABC2       | 5000  | 2019-02-07   | 2019-02-11     | 2019-02-02
5   | null       | 3000  | 2019-02-12   | 2019-02-15     | 2019-02-01

Здесь промо-код - это то, что подразумевает его название.Если пользователь не бронирует с промо-кодом, он равен нулю (5-я запись).Надеюсь, что остальные поля итоги, прибытие_дата, дата отправления и дата_бронирования понятны для вас.

Мой вопрос: я хочу создать отчет примерно такого типа.

promo_code | number_of_bookings | revenue | Average_length_of_stay | Average_depart_date | Average_reservation_revenue
ABC1       | 3                  | 6500    | 3                      | 5                   | 2166
ABC2       | 1                  | 5000    | 4                      | 5                   | 5000

Этот отчет называется доходом от промоотчет о коде.

Если я объясню, что происходит в этом отчете, то:

Средняя_длина_для_состояния = (дата отправления - дата прибытия) / число_дисков

Средняя_дата_дата = (дата_дата - забронировано_дата) / число_фот_буксов

Конечно, я мог как-то сгенерировать этот отчет по логике бэкэнда.Но мне было бы очень больно.Должен быть способ сделать запрос в SQL напрямую.

То, что я сделал до сих пор, это

SELECT promo_code ,count(*) as number_of_bookings,
sum(total) as revenue
FROM booking_widget.User_packages group by promo_code;

Я застрял с Average_length_of_stay, Average_depart_date и Average_reservation_revenue.Как получить средние значения, которые сгруппированы по выражению?

1 Ответ

0 голосов
/ 15 февраля 2019

Тривиально:

SELECT promo_code
     , COUNT(*) AS number_of_bookings
     , SUM(total) AS revenue
     , AVG(DATEDIFF(departure_date, arrival_date)) AS average_length_of_stay
     , AVG(DATEDIFF(departure_date, booked_date)) AS average_depart_date
     , AVG(total) AS average_reservation_revenue
FROM t
GROUP BY promo_code
...