Sql select和group by中的所有表达式仍然得到错误:ORA-00979:不是group by表达式
有一个PL/SQL过程,该过程接受用户输入的电影ID和特定日期范围,以根据ID和该日期范围内的事务打印出有关电影的信息。我不断地得到ORA-00979:不是一组表达 我在这里寻找解决办法。我一直注意到共同的主题是包括我在select子句中的GROUPBY子句中的所有表达式。就我所知,我已经做了,也许我错过了什么。如有任何信息,将不胜感激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
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中是什么意思?你的问题越来越没有意义了。