具有一个PL / SQL过程,该过程接受用户输入的电影ID和特定日期范围,以根据ID和该日期范围内的交易打印出有关电影的信息。我不断收到ORA-00979:不是GROUP BY表达式。
我已经在这里寻找解决方案。我一直看到,通用主题是将select子句中的所有表达式包括在group by子句中。据我所知,我已经做到了(也许我错过了一些东西)。任何信息将不胜感激
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;
答案 0 :(得分:1)
HAVING
子句中可以存在的表达式分为三类:
用于汇总行的列或表达式,即GROUP BY
子句中指定的行。
聚合功能,例如SUM()
,MIN()
,MAX()
等。
列直接取决于类别1中的列。
但是,在您的查询中,HAVING
子句包含表达式transactions.tr_date
,该表达式不属于上述任何类别。
也许可以通过将其改写为MIN(transactions.tr_date)
或类似名称来使其归为类别2。
如果不是这种情况,那么您可能需要完全重新考虑您的查询。