2012-04-01 2 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) 

Я пытаюсь получить максимум средней цены на билеты, которые клиенты заказали, группу по FLIGHT_NUMBER.

+0

@Michael Я использую Oracle и JDBC. Я попытался избавиться от пространства, но он не сработал. – mpang

ответ

2

Несколько вопросов.

  1. Вы не можете использовать AS в Oracle псевдоним имя таблицы
  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

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». Я удалил их. –

 Смежные вопросы

  • Нет связанных вопросов^_^