平均值,计数,按选择查询分组

时间:2019-02-15 12:53:15

标签: mysql sql group-by aggregate-functions

我正在开发预订引擎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子句的平均值?

1 个答案:

答案 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