我不确定如何获得总和的最大值。我以为我可以按降序显示它,然后使用“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
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] 了解更多信息。
首先,您可能想要使用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
。您的案例是专门解决的,略低于页面的一半(但如果您要使用该功能,整个页面可能值得一读)。