我有sql如:
select
c.customerID, sum(o.orderCost)
from customer c, order o
where c.customerID=o.customerID
group by c.customerID;
返回
列表customerID, orderCost
其中orderCost
是客户所有订单的总成本。我想选择付给我们最多的客户(谁拥有最高的订单成本)。我需要为此创建嵌套查询吗?
答案 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)
您需要为此创建嵌套查询。 两个问题。