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 的一个很好的功能,其中布尔值在数字上下文中被视为数字。
我有一个 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 的一个很好的功能,其中布尔值在数字上下文中被视为数字。