SQL命令未正确结束(嵌套聚合与分组)

时间:2012-04-01 03:38:18

标签: sql oracle jdbc

当我尝试执行此查询时,我一直收到此错误,但我无法弄清楚出了什么问题。我正在使用Oracle和JDBC。

以下是查询:

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)

我试图获得客户预订的门票平均价格的最大值,按航空号码分组。

2 个答案:

答案 0 :(得分:2)

一些问题。

  1. 您无法在Oracle中使用AS来为表名设置别名
  2. 您不能像那样在子查询中引用别名TEMP
  3. 使用分析函数通常是最有效的方法。

    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)
    

答案 1 :(得分: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
                       );