Sql select和group by中的所有表达式仍然得到错误:ORA-00979:不是group by表达式

Sql select和group by中的所有表达式仍然得到错误:ORA-00979:不是group by表达式,sql,oracle,plsql,group-by,Sql,Oracle,Plsql,Group By,有一个PL/SQL过程,该过程接受用户输入的电影ID和特定日期范围,以根据ID和该日期范围内的事务打印出有关电影的信息。我不断地得到ORA-00979:不是一组表达 我在这里寻找解决办法。我一直注意到共同的主题是包括我在select子句中的GROUPBY子句中的所有表达式。就我所知,我已经做了,也许我错过了什么。如有任何信息,将不胜感激 create or replace PROCEDURE COMPUTE_MOVIE_STATS (MOVIE_ID IN NUMBER, START_DATE

有一个PL/SQL过程,该过程接受用户输入的电影ID和特定日期范围,以根据ID和该日期范围内的事务打印出有关电影的信息。我不断地得到ORA-00979:不是一组表达

我在这里寻找解决办法。我一直注意到共同的主题是包括我在select子句中的GROUPBY子句中的所有表达式。就我所知,我已经做了,也许我错过了什么。如有任何信息,将不胜感激

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;

HAVING子句中可以出现的表达式分为三类:

用于聚合行(即GROUPBY子句中指定的行)的列或表达式

聚合函数,如总和、最小值、最大值等

直接依赖于类别1中的列的列

但是,在查询中,HAVING子句包含表达式transactions.tr_date,它不属于上述任何类别

也许你可以把它改成MINtransactions.tr_date或类似的名称,使之归入第二类


如果情况并非如此,那么您可能需要重新考虑您的查询。

having是用于组级别的条件。在事务日期介于某些值之间的情况下进行分组之前,似乎需要从基表中获取数据。这属于where子句。但是:什么是开始日期和结束日期?您是否需要按已分组的相同列进行分组,并获取这些额外列的最小值和最大值?开始日期和结束日期作为用户的输入。请提供示例数据和所需结果。您应该使用正确、明确、标准的联接语法编写查询。更重要的是,使用限定的列名,以便人们知道列的来源!在我看来,HAVING子句应该添加到WHERE子句中。如果start_date和end_date作为用户的输入,那么将它们包装在min和max中是什么意思?你的问题越来越没有意义了。