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