Неправильная команда SQL (вложенное агрегирование с группированием) - PullRequest
2 голосов
/ 01 апреля 2012

Я получаю эту ошибку, когда пытаюсь выполнить этот запрос, хотя не могу понять, что пошло не так. Я использую 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 ]

2 голосов
/ 01 апреля 2012

Несколько проблем.

  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 голосов
/ 01 апреля 2012
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
                       );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...