我有一張有4張桌子的數據庫:預訂,酒店,客人和房間。我試圖讓我的SQL語句(在Oracle中)產生每個酒店的平均房價。這是目前我有:SQL語句的結構不正確?
SELECT HOTEL.H_NAME "HOTEL NAME", ROUND(AVG (R_PRICE), 1) "AVERAGE ROOM PRICE"
FROM ROOM, HOTEL
WHERE HOTEL.H_NAME = 'Shangra_La'
OR HOTEL.H_NAME = 'Hilton'
OR HOTEL.H_NAME = 'Sheraton'
GROUP BY HOTEL.H_NAME
ORDER BY HOTEL.H_NAME;
從我以爲,這句話將選擇酒店的名稱以及在「Shangra_la」所有的房間平均價格,「希爾頓」和「喜來登」並命令他們酒店的名字,但是當我這樣做時,我得到的每個酒店的平均值是錯的。這是我的輸出:
H_NAME AVG. R_PRICE
Hilton 253.5
Shangra_La 253.5
Sheraton 253.5
下面是ROOM表中的數據:
insert into room values
('1','H100','S',220.00);
insert into room values
('2','H100','D',230.00);
insert into room values
('3','H100','F',310.00);
insert into room values
('1','H200','S',260.00);
insert into room values
('2','H200','D',170.00);
insert into room values
('3','H200','S',250.00);
insert into room values
('4','H200','F',180.00);
insert into room values
('5','H200','F',295.00);
insert into room values
('1','H300','D',200.00);
insert into room values
('2','H300','S',420.00);
和酒店:
insert into hotel values
('H100','Sheraton','Melbourne');
insert into hotel values
('H200','Shangra_La','Sydney');
insert into hotel values
('H300','Hilton', 'Perth');
有我構造的說法不正確?我能做些什麼來解決這個問題?希望我已經提供了足夠的信息。
當我嘗試使用HOTEL.HOTEL_NO = ROOM.HOTEL_NO時,它仍然給我同樣的結果,還有其他想法嗎? –
如果你在沒有GROUP BY和ORDER BY的情況下執行SELECT *,你能看到你得到的結果嗎? –
你究竟是什麼意思?你的意思是刪除組並按順序排列,並將其替換爲*? –