1

ホテルのデータベースから次の質問に答えようとしています

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;

これらはデータベースの見出しです

ゲスト

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

部屋

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 
4

3 に答える 3

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);

where句で""を実行しないでください。列year(date_in)=2011にインデックスがある場合、インデックスの使用が妨げられdate_inます。持っていなくても構いません。

于 2012-08-29T09:17:53.607 に答える
1

必要なのはMONTH関数です。これは、ほとんどのデータベースエンジンで同じです。だから試してみてください

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

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

YEAR:を使用してwhere句を簡略化することもできます。

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);
于 2012-08-29T09:18:28.600 に答える
1

月あたりの数が必要なので、

select month(date_in), count(*) 
from booking 
where year(date_in)=2011
group by month(date_in)
order by month(date_in); 
于 2012-08-29T09:14:48.687 に答える