Mysql SQL:特定日期范围内的计数/求和列
我有一张大致像这样的桌子。有数千行Mysql SQL:特定日期范围内的计数/求和列,mysql,sql,constraints,date-range,Mysql,Sql,Constraints,Date Range,我有一张大致像这样的桌子。有数千行 booking_date checkin_date ...some other columns .... booking_value 22-mar-2016 29-mar-2016 ........................... $150 01-apr-2016 17-may-2016 ........................... $500 09-apr-2016
booking_date checkin_date ...some other columns .... booking_value
22-mar-2016 29-mar-2016 ........................... $150
01-apr-2016 17-may-2016 ........................... $500
09-apr-2016 09-apr-2016 ........................... $222
17-apr-2016 23-apr-2016 ........................... $75
19-apr-2016 31-july-2016 ........................... $690
03-May-2016 07-May-2016 ............................. $301
.
.
.
.
我试图计算2016年4月每天的预订数量和预订价值。第二部分是计算预订日期和检查日期相同的预订数量
我对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 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 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);
选择演员阵容(预订日期为日期),将(*)计算为预订数量,
总和(CAST(预订日期为日期)=CAST(签入日期为日期))作为计数,日期相同,
总额(记账金额)作为记账金额
从t
其中预订日期>='2016-04-01'和
预订日期<'2016-05-01'
按演员分组(预订日期为日期);
特别要注意日期的过滤。直接比较允许MySQL使用索引
同一日期的数字计算使用MySQL的一个很好的功能,其中布尔值在数字上下文中被视为数字。我建议使用以下查询:
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);
选择演员阵容(预订日期为日期),将(*)计算为预订数量,
总和(CAST(预订日期为日期)=CAST(签入日期为日期))作为计数,日期相同,
总额(记账金额)作为记账金额
从t
其中预订日期>='2016-04-01'和
预订日期<'2016-05-01'
按演员分组(预订日期为日期);
特别要注意日期的过滤。直接比较允许MySQL使用索引
同一日期的数字计算使用MySQL的一个很好的功能,其中布尔值在数字上下文中被视为数字。请标记相应的数据库名称。同时添加您正在尝试使用的脚本和预期数据。预期结果将非常有用。请标记相应的数据库名称。还要添加您正在尝试使用的脚本和预期的数据。预期的结果会很有帮助。谢谢,这非常有效。我可以问一下,如果预订日期和检查日期在同一日期范围内相同,我应该包括什么来查找预订数量?@rahul请检查脚本中添加的新计数计算。非常感谢您的帮助。哦。。。混乱。新的计算也将每天检查。例如,如果2016年4月1日有5次预订,则会计算其中有多少人具有相同的预订和入住日期。可能是五分之二。希望这对你没问题。是的,我没问题,谢谢你的时间。谢谢,这很好用。我可以问一下,如果预订日期和检查日期在同一日期范围内相同,我应该包括什么来查找预订数量?@rahul请检查脚本中添加的新计数计算。非常感谢您的帮助。哦。。。混乱。新的计算也将每天检查。例如,如果2016年4月1日有5次预订,则会计算其中有多少人具有相同的预订和入住日期。可能是五分之二。希望你没问题。是的,我没问题,谢谢你的时间。@rahul。它不仅仅是干净的代码。这是编写查询的最佳方式。能够使用索引(和分区)进行过滤非常重要。我同意,很高兴学到了一些东西。这对我来说也很容易理解。@rahul。它不仅仅是干净的代码。这是编写查询的最佳方式。能够使用索引(和分区)进行过滤非常重要。我同意,很高兴学到了一些东西。这对我来说也很容易理解。