从结果中获取具有最大值的行

时间:2011-10-02 12:15:44

标签: sql oracle oracle10g

我有sql如:

select 
  c.customerID, sum(o.orderCost) 
from customer c, order o 
where c.customerID=o.customerID 
group by c.customerID;

返回

列表
customerID, orderCost

其中orderCost是客户所有订单的总成本。我想选择付给我们最多的客户(谁拥有最高的订单成本)。我需要为此创建嵌套查询吗?

2 个答案:

答案 0 :(得分:1)

您需要嵌套查询,但如果使用analytic functions,则无需访问表。

select customerID, sumOrderCost from
(
    select customerID, sumOrderCost,
        rank() over (order by sumOrderCost desc) as rn
    from (
        select c.customerID, sum(o.orderCost) as sumOrderCost
        from customer c, orders o
        where c.customerID=o.customerID
        group by c.customerID
    )
)
where rn = 1;

rank()函数按原始查询按sum()值对结果进行排名,然后您只选择排名最高的那些 - 即总订单总成本最高的行

如果多个客户的总订单成本相同,则返回两者。如果这不是您想要的,您将不得不决定如何确定使用哪个单一结果。例如,如果您想要最低的客户ID,请将其添加到排名功能:

select customerID, sumOrderCost,
    rank() over (order by sumOrderCost desc, customerID) as rn

您可以调整原始查询以返回其他数据,仅用于排序,而不是将其包含在外部select中。

答案 1 :(得分:0)

您需要为此创建嵌套查询。 两个问题。