Все выражения в select и group by, но все равно получают ошибку: ORA-00979: не выражение GROUP BY - PullRequest
0 голосов
/ 04 мая 2019

Иметь процедуру PL / SQL, которая принимает пользовательский ввод идентификатора фильма и определенного диапазона дат, чтобы распечатать информацию о фильме на основе идентификатора и транзакций в этом диапазоне дат. Я продолжаю получать ORA-00979: не выражение GROUP BY.

Я искал здесь решения. Я продолжаю видеть, что общей темой является включение всех выражений в предложение group by, которое есть в предложении select. Насколько я знаю, я сделал это (возможно, я что-то пропустил). Любая информация будет принята с благодарностью

create or replace PROCEDURE COMPUTE_MOVIE_STATS (MOVIE_ID IN NUMBER, START_DATE IN DATE , END_DATE IN DATE ) AS 

MovieCheckID movies.m_id%type;
Begin
    MovieCheckID := check_movie_id(movie_ID);

    If MovieCheckID >= 1 
    then

select a_seat_capacity, tr_quantity, tr_sum_total, m_title 
  into audit_cap, ticket_num, total_amount, movie_name 
  from showtimes s  
  join auditorium a on a.a_id = s.show_audi_id
  join movies m on m.m_id = s.show_movie_id 
  join transactions t on t.tr_show_id = s.s_id 
 where moviecheckID = movie_id
 group by a_seat_capacity, tr_quantity, tr_sum_total, m_title
having transactions.tr_date between min(start_date) and max(end_date);


  NULL;
END COMPUTE_MOVIE_STATS;

1 Ответ

1 голос
/ 04 мая 2019

Выражения, которые могут присутствовать в предложении HAVING, делятся на три категории:

  1. Столбцы или выражения, которые вы используете для агрегирования строк, то есть указанныхв предложении GROUP BY.

  2. Функции агрегирования, такие как SUM(), MIN(), MAX() и т. д.

  3. Столбцыкоторые напрямую зависят от элементов из категории # 1.

Однако в вашем запросе предложение HAVING включает выражение transactions.tr_date, которое не входит ни в одно изкатегории выше.

Может быть, вы можете сделать так, чтобы он попал в категорию # 2, перефразировав его как MIN(transactions.tr_date) или аналогичный.

Если это не так, то вам, вероятно, нужно полностью переосмыслить свой запрос.

...