2012-04-01 54 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

@邁克爾我使用Oracle和JDBC。我試圖擺脫空間,但它沒有工作.. – mpang 2012-04-01 03:43:11

回答

2

有幾個問題。

  1. 不能使用AS在甲骨文別名表名
  2. 您不能引用別名TEMP在這樣的子查詢。

使用分析函數通常是最有效的方法。

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 2012-04-01 03:58:39

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 2012-04-01 03:52:32

+0

oracle中的表別名不應該具有「AS」。我刪除了它們。 – 2012-04-01 05:27:34