我有一张有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 *,你能看到你得到的结果吗? –
你究竟是什么意思?你的意思是删除组并按顺序排列,并将其替换为*? –