2012-04-01 9 views
2

何がうまくいかなかったかはわかりませんでしたが、このクエリを実行しようとするとこのエラーが発生します。私はOracleとJDBCを使用しています。私は顧客が便によって、グループを予約したチケットの平均価格の最大値を取得しようとしているSQLコマンドが正しく終了しない(グループ化されたネストされた集約)

SELECT Temp.flight_number, Temp.avgprice 
FROM (SELECT P.flight_number, AVG (P.amount) AS avgprice 
     FROM purchase P 
     GROUP BY P.flight_number) AS Temp 
WHERE Temp.avgprice = (SELECT MAX (Temp.avgprice) 
         FROM Temp) 

は、ここでのクエリです。

+0

@Michael私はOracleおよびJDBCを使用して因数分解サブクエリでこのような何かを行うことができます。私はスペースを取り除こうとしましたが、動作しませんでした.. – mpang

答えて

2

いくつかの問題があります。

  1. あなたは、あなたがそのようなサブクエリにエイリアスTEMPを参照することはできませんテーブル名
  2. の別名には、OracleでASを使用することはできません。

一般に、解析関数を使用する方が効率的なアプローチになります。

SELECT flight_number, 
     avgprice 
    FROM (
    SELECT t.flight_number, 
      t.avgprice, 
      rank() over (order by t.avgprice desc) rnk 
     FROM (SELECT P.flight_number, 
        AVG (P.amount) AS avgprice 
       FROM purchase P 
      GROUP BY P.flight_number) t 
    ) 
WHERE rnk = 1 

また

WITH temp AS (
    SELECT P.flight_number, 
     AVG (P.amount) AS avgprice 
    FROM purchase P 
    GROUP BY P.flight_number 
) 
SELECT flight_number, 
     avgprice 
    FROM temp 
WHERE avgprice = (SELECT MAX(avgprice) 
        FROM temp) 
+0

それは、ありがとう、たくさん働く! – mpang

0
SELECT Temp.flight_number, Temp.avgprice 
FROM (SELECT P.flight_number, 
      AVG (P.amount) AS avgprice 
     FROM purchase P 
     GROUP BY P.flight_number) Temp 
WHERE Temp.avgprice = (SELECT MAX (Temp1.avgprice) 
         FROM (SELECT P.flight_number, 
            AVG(P.amount) AS avgprice 
          FROM purchase P 
          GROUP BY P.flight_number) temp1 
         ); 
+0

mobile.pleaseからの回答を追加しました。誤操作を無視しました。 – Teja

+0

oracleのテーブルの別名に「AS」が含まれていてはいけません。私はそれらを削除しました。 –

関連する問題