0

私はORACLEを使用したSQLの初心者であり、いくつかの問題が発生しました。部屋の価格に関するデータが入力された4つのテーブル(HOTEL、ROOM、BOOKING、GUEST)を含む基本的なデータベースがあります。

230〜350ドルの価格帯で部屋を予約したゲストの数と名前を見つけることになっている書面によるクエリがあります。また、そのような部屋を予約した回数も表示します。しかし、それは私に正しい出力を与えていないようで、私は理由を理解することができません。クエリは次のとおりです。

SELECT GUEST.GUEST_NAME "GUEST NAME",GUEST.GUEST_NO "GUEST NUMBER", 
COUNT(GUEST.GUEST_NO)     "NUMBER OF TIMES BOOKED"
FROM ROOM, GUEST, BOOKING
WHERE R_PRICE>=260
AND R_PRICE<=350
AND GUEST.GUEST_NO = BOOKING.GUEST_NO
AND ROOM.HOTEL_NO = BOOKING.HOTEL_NO
GROUP BY GUEST.GUEST_NO, GUEST.GUEST_NAME
ORDER BY "NUMBER OF TIMES BOOKED" ASC;

そして出力:

Tina Duncan      G001    2
Jenny Freeman    G003    2
Martin Ferguson  G006    3
Paul Happy       G002    3
Steve Kirkwood   G005    3

テーブルのサンプルは次のとおりです。

部屋:

   ROOM_NO HOTEL_NO R_TYPE
------- -------- ------ ---------
1       H100     S          220
2       H100     D          230
3       H100     F          310
1       H200     S          260
2       H200     D          170
3       H200     S          250
4       H200     F          180
5       H200     F          295
1       H300     D          200
2       H300     S          420

予約:

DATE_FROM DATE_TO   ROOM_NO
--------- --------- -------
15-AUG-12 17-AUG-12 1
30-AUG-12 15-SEP-12 2
01-AUG-12 02-AUG-12 2
10-AUG-12 11-AUG-12 2
01-SEP-12 15-SEP-12 3
31-JUL-12 02-AUG-12 1
11-JUL-12 01-AUG-12 1
12-JUL-12 13-JUL-12 1
14-JUL-12 15-JUL-12 1
17-AUG-12 28-AUG-12 2
31-JUL-12 01-SEP-12 1
31-AUG-12 01-SEP-12 2
31-AUG-12 15-SEP-12 4
01-SEP-12 15-SEP-12 1

ゲスト:

GUEST_NO G_NAME
-------- --------------------
G001     Tina Duncan
G002     Paul Happy
G003     Jenny Freeman
G012     Dianne Kelly
G005     Steve Kirkwood
G006     Martin Ferguson
G007     Vanessa Horton
Goo8     Bianca Begg

出力は次のようになります。

Paul Happy       G002    2
Jenny Freeman    G003    1
Steve Kirkwood   G005    1
Martin Ferguson      G006    1
Dianne Kelly     G012    1

うまくいけば、私はあなたに十分に与えました、私が少しの助けを得ることができればそれが山積みになることを感謝します。みんなありがとう!

4

2 に答える 2

1

出力が正しくないと考える理由を実際には説明していませんが、いくつかのことがすぐに思い浮かびます。

まず、Room テーブルの価格ではなく、Booking テーブルに保存されている価格を使用します。なんで?Room テーブルの価格は時間とともに変化しますが、Booking テーブルの価格は顧客が実際に支払った価格です。編集予約テーブルに支払った価格が保存されていないことに気付きました。それも必要になります!!

次に、関心のある価格帯が 230 ドルから 350 ドルであると述べていますが、クエリは 260 ドルから 350 ドルです。

第三に、予約の数を数えたい場合は、予約の数を数えます。あなたはゲストIDを数えています。

次のクエリのようなものをお勧めします。

SELECT GUEST.GUEST_NAME         "GUEST NAME",
       GUEST.GUEST_NO           "GUEST NUMBER", 
       COUNT(BOOKING.BOOKINGID) "NUMBER OF TIMES BOOKED"
FROM BOOKING JOIN
     GUEST ON GUEST.GUEST_NO = BOOKING.GUEST_NO
WHERE BOOKING.PRICE BETWEEN 230 AND 350
GROUP BY GUEST.GUEST_NO, GUEST.GUEST_NAME
ORDER BY "NUMBER OF TIMES BOOKED" ASC;
于 2012-10-23T10:33:45.400 に答える