我正在开发预订引擎Web应用程序。 用户预订后,将转到该表。
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
在这里,promo_code是它的名字所隐含的含义。如果用户未使用promo_code预订,则为null(第5条记录)。 希望其他字段总计,arrival_date,department_date和booked_date对您清楚。
我的问题是我想生成这样的报告。
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。 如何获得group by子句的平均值?
答案 0 :(得分:1)
这很简单:
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