SQL:对特定日期范围内的列进行计数/求和

SQL: Count/ sum columns within a specific date range

我有一个 table 大致是这样的。有几千行。

booking_date   checkin_date    ...some other columns  ....    booking_value
22-mar-2016      29-mar-2016   ...........................         0
01-apr-2016      17-may-2016   ...........................         0
09-apr-2016      09-apr-2016   ...........................         2
17-apr-2016      23-apr-2016  ...........................          
19-apr-2016      31-july-2016 ...........................          0
03-May-2016      07-May-2016  .............................        1
.
.
.
.

我正在尝试计算 2016 年 4 月每天的预订数量和每天的预订价值。第二部分是计算 booking_date 和 checking_date 的预订数量一样。

我对 SQL 很陌生。我可以在纸上制定逻辑,但似乎无法弄清楚如何处理代码。

你可以试试下面的代码-

SELECT CAST(booking_date AS DATE), 
COUNT(*) Number_of_Booking,
COUNT(
    CASE 
        WHEN CAST(booking_date AS DATE)  
            = CAST(checkin_date AS DATE) THEN 1
        ELSE NULL
    END
) count_with_same_date,
SUM(booking_value) booking_value -- Booking value has to be Number field
FROM your_table
WHERE YEAR(booking_date ) = 2016
AND MONTH(booking_date ) = 4
GROUP BY CAST(booking_date AS DATE)

第一个问题你可以试试

Select booking_date
       ,count(*) as Number_of_bookings
       ,Sum(booking_value) as value
From table_name
Where booking_date between '01-apr-2016' and '30-apr-2016'
group by booking_date:

或者您可以在过滤器中使用 month() 和 year() 函数。

第二题试试,

Select booking_date
       ,checkin_date
       ,count(*)
from table_name
where booking_date=checkin_date
group by booking_date, checkin_date

我推荐以下查询:

SELECT CAST(booking_date AS DATE), COUNT(*) as Number_of_Booking,
       SUM(CAST(booking_date AS DATE) = CAST(checkin_date AS DATE)) as count_with_same_date,
       SUM(booking_value) as booking_value
FROM t
WHERE booking_date >= '2016-04-01' AND
      booking_date < '2016-05-01'
GROUP BY CAST(booking_date AS DATE);

请特别注意日期过滤。直接比较允许 MySQL 使用索引。

同一日期的数字计算使用了 MySQL 的一个很好的功能,其中布尔值在数字上下文中被视为数字。