【问题标题】:Finding the MAX [duplicate]寻找 MAX [重复]
【发布时间】:2012-10-18 22:33:18
【问题描述】:

可能重复:
Oracle SQL - How to Retrieve highest 5 values of a column

我有一个简单的问题要问对 SQL 有任何了解的人,但由于我是新手,虽然我尝试了许多不同的方法,但我似乎永远无法正确地获取语法。我只想显示 MAX 结果的平均酒店。目前它单独显示所有酒店的平均值。这是我可以使用 MAX 功能的东西吗?我正在使用甲骨文

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 = 'Shangra_La'
OR HOTEL.H_NAME = 'Hilton'
OR HOTEL.H_NAME = 'Sheraton'
GROUP BY HOTEL.H_NAME
ORDER BY HOTEL.H_NAME;

【问题讨论】:

  • MAX功能会给你最高的价值,也就是最高的价格。我不明白您所说的“平均酒店是 MAX 结果”是什么意思。
  • 请您详细说明I want to display only the average hotel which is the MAX result. 的含义?如果可能,请包括示例输入数据和您希望/期望的输出示例。
  • 对不起,我措辞不佳。目前该查询显示 3 家不同酒店的平均房价。我希望查询返回 3 个中每间酒店客房平均价格最高的酒店。
  • @danboy - 最高和平均术语通常是相互排斥的。假设三个酒店A, B, C 的价格为150.00, 169.00, 180.00平均价格是~166.33。它们都没有“平均”价格。但是酒店C 的价格最高:180.00。那么“最高平均价格”是什么意思。如前所述,数据样本确实有助于澄清问题。

标签: sql oracle top-n


【解决方案1】:

在 Oracle 中,您可以使用 ROWNUM 伪列。

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 
) v
WHERE ROWNUM = 1
ORDER BY "AVERAGE ROOM PRICE" DESC;

【讨论】:

  • Order by 子句应该应用于子查询,如果你想获得价格的最大值。否则,您只需订购 1 行 - 首先。
  • 啊,这很有道理,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2011-10-22
  • 2016-04-15
  • 2018-04-24
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多