«не является групповой функцией для одной группы»

#sql #oracle

#sql #Oracle

Вопрос:

Привет, я пытаюсь заставить работать приведенную ниже логику. но там сказано не об одной группе по функции.. не уверен, почему..Я хочу получить записи, которые есть в обеих таблицах, и добавить доход от каждой из них, чтобы накопить общий доход при первом выборе.

 select ob_location_id, 
ib_location_id, 
vehicle_class, 
return_date,
RENTAL_DATE,
sum(revenue) as TotalRevenue
from
(select ob_location_id, 
ib_location_id, 
vehicle_class, 
return_date,
RENTAL_DATE,
SUM(DEMAND_TO_COME * BOARD_RATE) AS revenue
from PA_FCS_BLEND_FINAL) a 
Union all 
Select 
ob_location_id, 
ib_location_id, 
vehicle_class, 
return_date,
RENTAL_DATE,
sum(MATERIALIZED_BOH_REVENUE) as revenue
from PA_FCS_BLEND_BOH

group by 
ob_location_id, 
ib_location_id, 
vehicle_class, 
return_date,
RENTAL_DATE,
totalRevenue;
  

Ответ №1:

  • В a встроенном представлении отсутствует GROUP BY предложение
  • финал GROUP BY не должен содержать TOTAL_REVENUE

Фиктивный пример (типы данных, конечно, не совпадают, но это неважно):

 SQL> CREATE TABLE pa_fcs_blend_final
  2  (
  3     ob_location_id  NUMBER,
  4     ib_location_id  NUMBER,
  5     vehicle_class   NUMBER,
  6     return_date     NUMBER,
  7     rental_date     NUMBER,
  8     demand_to_come  NUMBER,
  9     board_rate      NUMBER
 10  );

Table created.

SQL> insert into pa_fcs_blend_final values
  2  (1, 2, 3, 4, 5, 6, 7);

1 row created.

SQL> CREATE TABLE pa_fcs_blend_boh
  2  (
  3     ob_location_id            NUMBER,
  4     ib_location_id            NUMBER,
  5     vehicle_class             NUMBER,
  6     return_date               NUMBER,
  7     rental_date               NUMBER,
  8     materialized_boh_revenue  NUMBER
  9  );

Table created.

SQL> insert into pa_fcs_blend_boh values
  2  (1, 2, 3, 4, 5, 6);

1 row created.
  

Запрос, который возвращает что-то; это правильно? Понятия не имею.

 SQL>   SELECT ob_location_id,
  2           ib_location_id,
  3           vehicle_class,
  4           return_date,
  5           rental_date,
  6           SUM (revenue) AS totalrevenue
  7      FROM (  SELECT ob_location_id,
  8                     ib_location_id,
  9                     vehicle_class,
 10                     return_date,
 11                     rental_date,
 12                     SUM (demand_to_come * board_rate) AS revenue
 13                FROM pa_fcs_blend_final
 14            GROUP BY ob_location_id,                         --> this is missing
 15                     ib_location_id,
 16                     vehicle_class,
 17                     return_date,
 18                     rental_date) a
 19  GROUP BY ob_location_id,
 20           ib_location_id,
 21           vehicle_class,
 22           return_date,
 23           rental_date
 24  UNION ALL
 25    SELECT ob_location_id,
 26           ib_location_id,
 27           vehicle_class,
 28           return_date,
 29           rental_date,
 30           SUM (materialized_boh_revenue) AS revenue
 31      FROM pa_fcs_blend_boh
 32  GROUP BY ob_location_id,
 33           ib_location_id,
 34           vehicle_class,
 35           return_date,
 36           rental_date  --> total_revenue (you had) shouldn't be here
 37  /

OB_LOCATION_ID IB_LOCATION_ID VEHICLE_CLASS RETURN_DATE RENTAL_DATE TOTALREVENUE
-------------- -------------- ------------- ----------- ----------- ------------
             1              2             3           4           5           42
             1              2             3           4           5            6

SQL>
  

Комментарии:

1. После создания примеров таблиц запрос теперь исправлен (чтобы он не заканчивался ошибкой), но я не знаю, возвращает ли он нужный вам результат. Надеюсь, вы делаете. Взгляните, пожалуйста.