2017-11-18 26 views
-1

を選択されていない私のSQLコードは以下の通りです:SQL:最大値は最大

Select Model,Max(Price) FROM Printer GROUP BY Model ORDER BY Max(Price) DESC; 

それは次のように返す必要があります:

MODEL MAX PRICE 
3007 899 
3003 899 

しかし、それは代わりに、これを返します。

MODEL MAX PRICE 
3007 899 
3003 899 
3002 139 
3004 120 
3006 100 
3005 99 

私は間違っていますか?注文の変更や削除などを試みましたが、問題は解決しませんでした。

+0

SQLのは、正確に何をやっていることあなたはそれを見て、それをするように頼んだ。単純な言葉であなたが望む結果を説明できますか? –

+0

"しかし、それは私の問題を解決しませんでした。何の問題?それはうまく見えます。 –

+0

私は私が望むよりも多くのフィールドを取得しています。私はすべてのレコードの中で最高の価値を持つレコードを見たいと思っています。この場合、899が最高値であり、モデル3007とモデル3003の2つのレコードのみを表示したいと考えています。 –

答えて

1

これは、Oracle 12.1以降を使用している場合、私は

SELECT 
Model, 
Price 
FROM 
Printer 
WHERE price = (SELECT MAX(PRICE) FROM Printer) 
; 
1

最大の価格の行のみが必要な場合は、行数を制限する必要があります。あなたはrank()をしたいように見える:

SELECT Model, max_price 
FROM (SELECT Model, MAX(Price) as max_price, 
      RANK() OVER (ORDER BY MAX(PRICE) DESC NULLS LAST) as seqnum 
     FROM Printer p 
     GROUP BY Model 
    ) p 
WHERE seqnum = 1; 
+0

お試しいただきありがとうございます。何らかの理由で私の質問に空白の結果が出ます。 –

+0

@BillBisco。 。 。 'PRICE'に' NULL'値があれば、それが起こる可能性があります。その状況を処理するために 'NULLS LAST'を追加しました。 –

1

を望んでいたものを得るためのクリーナー方法である:

select model, max(price) from printer 
group by model 
order by max(price) desc 
fetch first row with ties;