select和group by中的所有表达式,但仍然会出现错误:ORA-00979:不是GROUP BY表达式

时间:2019-05-03 23:44:57

标签: sql oracle plsql group-by

具有一个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;

1 个答案:

答案 0 :(得分:1)

HAVING子句中可以存在的表达式分为三类:

  1. 用于汇总行的列或表达式,即GROUP BY子句中指定的行。

  2. 聚合功能,例如SUM()MIN()MAX()等。

  3. 列直接取决于类别1中的列。

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

也许可以通过将其改写为MIN(transactions.tr_date)或类似名称来使其归为类别2。

如果不是这种情况,那么您可能需要完全重新考虑您的查询。