2017-04-05 2 views
0

に、私は以下のコードに次のエラーを持っている*でパーティションを使用して選択することはできません:は同じクエリ

SELECT *, MAX(Salary) 
OVER (PARTITION BY ID_DEPT ORDER BY Salary DESC) R 
FROM SG_EMPLOYEES; 

が、私はとアスタリスクを変更する「を期待どこキーワードFROM が見つかりません」各列の名前はすべて正常に動作します。だから私はこれの背後にある理由を理解したい。

+1

答えはありませんが、ORDER BYの存在はこの文脈ではあまり意味がありません。 –

+2

'*'の代わりに 'SG_EMPLOYEES。*'を試してください –

+0

はい。とった。ありがとうございました! –

答えて

4

Oracleで*を使用する場合、他の式が選択されている場合は、修飾する必要があります。したがって:

SELECT e.*, 
     MAX(e.Salary) OVER (PARTITION BY e.ID_DEPT ORDER BY e.Salary DESC) as R 
FROM SG_EMPLOYEES e; 

私はすべての列名を修飾するのが大好きです。

ご質問は実際には非常に奇妙に思えます。あなたがORDER BY句必要はありません。

SELECT e.*, 
     MAX(e.Salary) OVER (PARTITION BY e.ID_DEPT) as R 
FROM SG_EMPLOYEES e; 

をお使いのバージョンでは、累積最大値を取った後、最高から最低までの給与を注文された - ので、累計では、全体の最大と同じです。

+0

ありがとう!分析関数のエイリアスが、アスタリスクの選択を呼び出すときに考慮されているため、結果がエラーになることはわかりませんでした。 –

関連する問題