2012-08-29 67 views
1

我试图从酒店数据库中回答以下问题酒店数据库的SQL查询

显示2011日历年的每个月的预订数。

这就是我到目前为止所提出的。

SELECT booking_no, 
     date_in, 
     Count(*) 
FROM booking 
WHERE date_in >= '01-jan-11' 
     AND date_in <= '31-dec-11' 
GROUP BY booking_no, 
      date_in 
ORDER BY date_in; 

这些数据库标题

GUEST

Name Type 
--------------------- ------------ 
GUEST_NO 
SURNAME 
GIVEN 
DOB 
SEX 
HOME_PHONE 
WORK_PHONE 
FAX 
ADDRESS 
SUBURB 
STATE 
POSTCODE 

ROOM

Name Type 
--------------------- ------------ 
ROOM_NO 
FLOOR_NO 
SPA_BATH 
NUM_BEDS 
PRICE 
LINKED_ROOM_NO) 

预订

Name Type 
--------------------- ----------- 
BOOKING_NO 
GUEST_NO 
ROOM_NO 
DATE_IN 
DATE_OUT 
+0

YPU似乎想要一个分组MONTH没有日期。 – Mithrandir

回答

1

你想每个月的数量,因此

select month(date_in), count(*) 
from booking 
where year(date_in)=2011 
group by month(date_in) 
order by month(date_in); 
1

尝试他:

SELECT Count(booking_no) bookings, 
     Month(date_in) month_name 
FROM booking 
WHERE date_in >= '01-jan-11' 
     AND date_in <= '31-dec-11' 
GROUP BY Month(date_in) 
ORDER BY Month(date_in); 

不要做“year(date_in)=2011”在where子句中,它会阻止索引的使用情况,如果你在date_in列上有一个。如果你没有,那没关系。

1

你需要的是一个MONTH函数。这在大多数数据库引擎中都是一样的。因此,尝试

SELECT booking_no, Month(date_in), Count(booking_no) 

GROUP BY Month(date_in) 
ORDER BY Month(date_in); 

你也可以简化您的where子句与YEAR

WHERE Year(date_in) = 2011 

共有:

SELECT Month(date_in), 
     Count(*) 
FROM booking 
WHERE Year(date_in) = 2011 
GROUP BY Month(date_in) 
ORDER BY Month(date_in);