不能使用group by,ORA-00979:不是GROUP BY表达式

时间:2017-10-05 21:53:44

标签: oracle-sqldeveloper

我正在计算所有酒店的每间酒店的客房数量。我有3张桌子,一张有酒店ID和酒店信息,另一张有酒店所在的州(分享Hotel_ID),第三张有每个酒店ID的房间信息。但我可以在这句话中得到“COUNT”和“GROUP BY”的作品。我正在使用Oracle SQLDeveloper

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”条款的情况下尝试时,它会在第一列和第二列中显示酒店名称而没有问题。

任何人都知道为什么我不能按酒店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 个答案:

答案 0 :(得分: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 - 让我知道我是否误解了你的计划等。这对我来说只是做了一些修改。