0

我不确定如何获得总和的最大值。我以为我可以按降序显示它,然后使用“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
4

2 回答 2

1

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

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] 查询的方法。 通过搜索 [oracle] [top-n] 了解更多信息。

于 2012-12-02T16:47:31.557 回答
0

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

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

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

是一个很好的解释ROWNUM。您的案例是专门解决的,略低于页面的一半(但如果您要使用该功能,整个页面可能值得一读)。

于 2012-12-02T16:52:32.970 回答