当我尝试执行此查询时,我一直收到此错误,但我无法弄清楚出了什么问题。我正在使用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)
我试图获得客户预订的门票平均价格的最大值,按航空号码分组。
答案 0 :(得分:2)
一些问题。
AS
来为表名设置别名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)
答案 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
);