以最高的总体维护成本显示驾驶室

时间:2012-12-02 16:34:11

标签: sql oracle top-n

我不确定如何获得总和的最大值。我以为我可以按降序显示它,然后使用“rownum = 1”但是没有用。有什么建议?这是我的代码。

select ca_make,  sum(ma_cost)
from cab join maintain on ca_cabnum = ma_cabnum 
Where rownum =1
group by ca_make
order by sum(ma_cost) desc

2 个答案:

答案 0 :(得分:1)

在ORDER BY之前应用ROWNUM()。您需要使用子查询:

select * from (
    select ca_make,  sum(ma_cost)
    from cab join maintain on ca_cabnum = ma_cabnum 
    group by ca_make
    order by sum(ma_cost) desc
    )
where rownum = 1

在Oracle中实现[top-n]查询有几种不同的方法。 Find out more by searching SO for [oracle] [top-n].

答案 1 :(得分:0)

首先,您可能想要使用LEFT JOIN。使用JOIN,您将排除所有 no 维护的出租车。 (显然,这对于找到最高成本无关紧要,但在寻找最低成本时会有所不同;并且会严重扭曲您尝试从此查询编译的任何统计信息)。

现在,回答你的问题......试试这个:

select * from
  (select ca_make,  sum(ma_cost)
  from cab 
    left join maintain on ca_cabnum = ma_cabnum 
  group by ca_make
  order by sum(ma_cost) desc)
where rownum = 1

hereROWNUM的一个很好的解释。您的案例是专门解决的,距离页面的一半不到一点(但如果您打算使用该功能,整个页面可能值得一读)。