1

HOTEL$260 ~ $350 のホテルを予約したテーブル内のすべての人を現在表示する SQL クエリがあります。オラクルを使用しています

SELECT guest.guest_name "GUEST NAME", 
       Count(guest.guest_no), 
       guest.guest_no   "GUEST           NUMBER", 
       room.r_price     "ROOM PRICE" 
FROM   room, 
       guest, 
       booking 
WHERE  r_price >= 260 
       AND r_price <= 350 
       AND guest.guest_no = booking.guest_no 
GROUP  BY guest.guest_no, 
       guest.guest_name, 
       room.room_price 
ORDER  BY guest.guest_name; 

GUEST.GUEST_NAME だけでグループ化できると思いました (したがって、ゲスト名を 2 倍にするのではなく、すべてのカウントを 1 つの名前の下に置きます)。

編集: クエリの現在の結果は次のようになります。

    GUEST NAME    COUNT   GUEST_NO R_PRICE
    Jenny Freeman   2   G003    260
    Jenny Freeman   2   G003    295
    Jenny Freeman   2   G003    310
    Martin Ferguson 3   G006    260
    Martin Ferguson 3   G006    295
    Martin Ferguson 3   G006    310
    Paul Happy  3   G002    260
    Paul Happy  3   G002    295
    Paul Happy  3   G002    310
    Steve Kirkwood  3   G005    260
    Steve Kirkwood  3   G005    295
    Steve Kirkwood  3   G005    310
    Tina Duncan 2   G001    260
    Tina Duncan 2   G001    295
    Tina Duncan 2   G001    310
    Vanessa Horton  1   G007    260
    Vanessa Horton  1   G007    295
    Vanessa Horton  1   G007    310

しかし、私は次のようなものを期待しています:

    GUEST NAME    COUNT   GUEST_NO R_PRICE
    Jenny Freeman   6   G003    260
    Martin Ferguson 9   G006    310
    Paul Happy  9   G002    310
    Steve Kirkwood  9   G005    260
    Tina Duncan 6   G001    310
    Vanessa Horton  3   G007    260
4

3 に答える 3

1

さて、私はあなたがステートメントごとにグループで変更する必要があると思います残りは私には大丈夫に見えます。Group Byステートメントに客室料金を含めないでください。質問が正しければ、問題が発生していると思います...

 GROUP BY GUEST.GUEST_NO,
          GUEST.GUEST_NAME

 MAX(R_PRICE) 
于 2012-10-17T12:29:50.247 に答える
0

ROOM_NO(または他のフィールド)によるBOOKINGでROOMに参加するのを忘れた可能性がありますか?
groupbyからROOMPRICEを削除しました。クエリを実行すると、ユニークなゲストと予約した部屋の数が、指定された範囲の価格と各ゲストの最大価格で返されます。

SELECT
    GUEST.GUEST_NAME "GUEST NAME",
    GUEST.GUEST_NO "GUEST NUMBER",
    COUNT(*) "CNT",
    MAX(R.R_PRICE) "ROOM PRICE"
FROM BOOKING B
    inner join ROOM R on R.ROOM_NO = B.ROOM_NO
    inner join GUEST G on G.GUEST_NO  = B.GUEST_NO
WHERE R.R_PRICE>=260 and R.R_PRICE<=350
GROUP BY G.GUEST_NO, G.GUEST_NAME
ORDER BY G.GUEST_NAME;
于 2012-10-17T11:24:08.443 に答える
-2

以下のSQLクエリを試すことができます:

SELECT GUEST.GUEST_NAME "GUEST NAME", COUNT(GUEST.GUEST_NO), GUEST.GUEST_NO "GUEST NUMBER", ROOM.R_PRICE "ROOM PRICE"
FROM ROOM, GUEST,BOOKING
WHERE ROOM.R_PRICE>=260
AND ROOM.R_PRICE<=350
AND GUEST.GUEST_NO = BOOKING.GUEST_NO
GROUP BY GUEST.GUEST_NAME
ORDER BY GUEST.GUEST_NAME;
于 2012-10-17T11:26:15.727 に答える