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] クエリを実装するには、いくつかの方法があります。 SO で [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 に答える