2017-10-05 159 views
1

我正在嘗試計算所有酒店的每個酒店的房間數量。我有3張桌子,其中一張帶有酒店ID和酒店信息,另一張帶有酒店所在的州(分享Hotel_ID),另一張帶有每個酒店ID的房間信息。但是我可以在這句話中得到「COUNT」和「GROUP BY」的工作。我使用的是Oracle的SQLDeveloper不能使用group by,ORA-00979:不是GROUP BY表達式

SELECT UPPER(A.HOTEL_NAME) "HOTEL NAME", 
     B.STATE AS STATE, 
     COUNT(C.ROOM_NUMBER) 

FROM HOTEL A 
    INNER JOIN STATE B ON B.ID_STATE = A.ID_STATE 
    INNER JOIN ROOM C ON C.ID_HOTEL = A.ID_HOTEL 

GROUP BY A.ID_HOTEL 
ORDER BY A.HOTEL_NAME ASC; 

當我嘗試沒有「COUNT」和「GROUP BY」子句就說明沒有問題,酒店名稱第一欄,並在第2的狀態下,酒店是它。

任何人都知道爲什麼我無法獲得按酒店ID分組的每個酒店(在第3列中)的房間數量?

SAMPLE DATA: 
HOTEL TABLE     ROOM TABLE    STATE TABLE 
========================== ======================= ====================== 
ID_HOTEL | HOTEL_NAME  ID_HOTEL | ROOM_NUMBER ID_HOTEL | STATE 
40  |STARDUST HOTEL  40  |101   40  |CALIFORNIA 
50  |GREENTREE HOTEL 50  |101   50  |ARIZONA 

我期待這樣的事情:

RESULTING VIEW: 
HOTEL_NAME  |STATE  |ROOM_COUNT 
STARDUST HOTEL |CALIFORNIA |1 
GREENTREE HOTEL|ARIZONA  |1 

提前感謝!

回答

1

您在GROUP BY表達式中缺少列。還沒收到SQL環境得心應手,所以我不能夠運行這個(加上你沒有提供的樣本數據集,所以不知道基數等是正確的),但嘗試:

SELECT 
    UPPER(A.HOTEL_NAME) "HOTEL NAME", 
    B.STATE AS STATE, 
    COUNT(C.ROOM_NUMBER) 
FROM HOTEL A 
INNER JOIN STATE B ON B.ID_STATE = A.ID_STATE 
INNER JOIN ROOM C ON C.ID_HOTEL = A.ID_HOTEL 
GROUP BY A.ID_HOTEL, A.HOTEL_NAME, B.STATE 
ORDER BY A.HOTEL_NAME ASC; 

公告我已將SELECT子句中的兩個非聚合列添加到您的GROUP BY中。

編輯

退房This SQL fiddle - 讓我知道如果我誤解你的計劃等,這是爲我工作稍作修改。

+0

感謝您的快速回答!我看到並現在明白了爲什麼你添加了兩個非聚合列,但是,我仍然得到相同的錯誤:(。給我一秒上傳一些示例數據! – Rycerzfrost

+0

不用擔心!查看我的編輯小提琴,讓我知道它是否適用於你,或者我誤解了你的問題。 –

+0

它現在工作,謝謝! – Rycerzfrost