寻找最大值。
寻找最大值。
可能重复:
我有一个简单的问题,想请教一些了解SQL的人,但由于我是一个非常新手,尽管我尝试了很多不同的方法,但似乎从来无法正确使用语法。我想只显示平均酒店价格中的最大结果。目前它显示的是每个酒店的平均价格。我可以使用MAX函数来实现这个吗?我正在使用Oracle。
SELECT HOTEL.H_NAME "酒店名称", ROUND(AVG (R_PRICE), 1) "平均房间价格" FROM ROOM JOIN HOTEL ON HOTEL.HOTEL_NO = ROOM.HOTEL_NO WHERE HOTEL.H_NAME = '香格里拉' OR HOTEL.H_NAME = '希尔顿' OR HOTEL.H_NAME = '喜来登' GROUP BY HOTEL.H_NAME ORDER BY HOTEL.H_NAME;
在Oracle中,可以使用伪列ROWNUM
来解决问题。(Finding the MAX)这个问题的出现是因为在查询中使用了ROWNUM = 1
来获取最大值,但是没有在子查询中使用ORDER BY
子句进行排序,导致只返回第一行结果而不是最大值。
要解决这个问题,需要将ORDER BY
子句应用到子查询中,以获取价格的最大值。修改后的查询如下:
SELECT * FROM ( SELECT HOTEL.H_NAME "HOTEL NAME", ROUND(AVG (R_PRICE), 1) "AVERAGE ROOM PRICE" FROM ROOM JOIN HOTEL ON HOTEL.HOTEL_NO = ROOM.HOTEL_NO WHERE HOTEL.H_NAME IN ('Shangra_La','Hilton','Sheraton') GROUP BY HOTEL.H_NAME ORDER BY "AVERAGE ROOM PRICE" DESC ) v WHERE ROWNUM = 1;
这样修改后,查询将返回价格的最大值。