我正在计算所有酒店的每间酒店的客房数量。我有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
提前致谢!
答案 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 - 让我知道我是否误解了你的计划等。这对我来说只是做了一些修改。