2012-10-17 54 views
1

我有一個SQL查詢,當前顯示錶HOTEL中的所有人預訂了$ 260到$ 350之間的酒店。我使用的是ORACLE無法正確GROUP BY(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(所以它把所有的下一個名字計的,而不是對房客的姓名翻倍)。

編輯:查詢一下目前的結果是這樣的:

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 
+1

你似乎不在你的sql中預訂和房間之間有一個鏈接。 – mcalex

+0

你想要什麼輸出?請告訴我們您想要查詢的內容!然後我們可以告訴你,如果你的查詢應該這樣做,是否非常接近你想做的事,或者你是否完全處於錯誤的軌道上。 –

+0

你究竟在做什麼?嘗試將guest_no和room_price從選定字段中取出,guest_no取出。 – Andrew

回答

1

好吧,我想你只需要通過聲明組以更改其餘看起來不錯給我。只是不包括房價格在集團By語句,我認爲這是爲您創造的問題,如果我是正確的得到您的問題...

GROUP BY GUEST.GUEST_NO, 
      GUEST.GUEST_NAME 

MAX(R_PRICE) 
+0

AHHH好像這樣做!我不得不通過語句去除select和group中的room.r_price。我認爲,因爲我在房間裏的兩個值之間進行了指定。r_price,我必須在選擇它,但它可以閱讀它沒有它在那裏罰款。謝謝:) MAX(R_PRICE)是什麼? –

+0

除了現在,當我有你/我寫的所有我的結果是三倍,嗯 –

+0

,以防萬一你想獲得最大的r_price。 –

0

可能是你忘了加入由ROOM_NO預訂房間(或其他領域)?
我已經從羣組中刪除了房間價格,現在查詢將返回唯一的客人和他們預訂的房間數量,並給定範圍內的價格以及每位客人的最高價格。

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; 
+0

它說,「SQL命令沒有正確結束」..嗯 –

+0

@danboy,我已經添加 」;」最後。你沒有指定你有oracle數據庫。 –

+0

是的,我注意到它丟失了,但它仍然有相同的錯誤。感謝您的幫助到目前爲止,我應該在 –

-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; 
+2

之前指定oracle請參見我嘗試這樣做時說的「不是GROUP BY表達式」,我理解的意思是(在研究它之後)我需要將所有選擇語句包含在通過,我不知道爲什麼。 –

+0

對不起,我將查詢更改爲GROUP BY GUEST.GUEST_NAME 這會給你獨特的客人名字 –

+1

它不起作用,你需要在GUEST_NO和R_PRICE上添加聚合或者將它添加到分組中,條款 –