Sql 如何按表达式对Oracle查询结果进行分组?

Sql 如何按表达式对Oracle查询结果进行分组?,sql,oracle,group-by,Sql,Oracle,Group By,我正在尝试运行Oracle SELECT查询,其中GROUP BY字段之一是表达式: SELECT CUSTOMER, TO_CHAR(EVENT_DATE, 'HH:MI:SS AM') AS "EVENT_TIME", COUNT(*) as "EVENT_COUNT" FROM events GROUP BY CUSTOMER,EVENT_TIME; 但我收到了这个错误信息: ORA-00904:“事件时间”:无效标识符 如果使用文字表达式而不是标识符: SELECT CUSTOMER,

我正在尝试运行Oracle SELECT查询,其中GROUP BY字段之一是表达式:

SELECT CUSTOMER, TO_CHAR(EVENT_DATE, 'HH:MI:SS AM') AS "EVENT_TIME", COUNT(*) as "EVENT_COUNT"
FROM events
GROUP BY CUSTOMER,EVENT_TIME;
但我收到了这个错误信息:

ORA-00904:“事件时间”:无效标识符

如果使用文字表达式而不是标识符:

SELECT CUSTOMER, TO_CHAR(EVENT_DATE, 'HH:MI:SS AM') AS "EVENT_TIME", COUNT(*) as "EVENT_COUNT"
FROM events
GROUP BY CUSTOMER,TO_CHAR(EVENT_DATE, 'HH:MI:SS AM');
我得到一个不同的错误:

ORA-00979:不是表达式的组


我可以在GROUPBY子句中使用表达式吗?如果是,怎么做?

这很奇怪,据我所知,第二个例子应该是可行的。您可以通过将to_char部分移动到派生表或cte来解决此问题,但我想您已经注意到了。顺便说一句:这看起来像是重复的,并且表明您的第二条语句应该是有效的:在第一条语句中,EVENT_DATE应该有效,而不是EVENT_TIME(即原始列的名称,而不是结果列的名称)。在某些语言中,表达式确实可以在Group By中工作,但我不知道Oracle。第二次查询肯定可以工作。但不确定别名是否需要双引号。请删除第一个查询中的双引号