按别名分组(Oracle)

zbwhf8kr  于 2023-04-20  发布在  Oracle
关注(0)|答案(6)|浏览(164)

如何使用别名对查询进行“分组依据”,例如:

select count(*), (select * from....) as alias_column 
from table 
group by alias_column

我得到'alias_column':INVALID_IDENTIFIER错误信息。为什么?如何对该查询进行分组?

vxqlmq5t

vxqlmq5t1#

select
  count(count_col),
  alias_column
from
  (
  select 
    count_col, 
    (select value from....) as alias_column 
  from 
    table
  ) as inline
group by 
  alias_column

如果在GROUP BY子句中重复相应的表达式,分组通常会起作用。只提到别名是不可能的,因为SELECT步骤是执行查询的最后一步,分组会在别名尚未定义时发生。
要对子查询的结果进行GROUP BY,您将不得不稍微绕一点路,并使用嵌套查询,如上所述。

4szc88ey

4szc88ey2#

将查询与别名列嵌套:

select count(*), alias_column
from
( select empno, (select deptno from emp where emp.empno = e.empno) as alias_column
  from emp e
)
group by alias_column;
wnvonmuf

wnvonmuf3#

select count(*), (select * from....) as alias_column 
from table 
group by (select * from....)

在Oracle中,不能在group by子句中使用别名。

smtd7mpg

smtd7mpg4#

要在Oracle中使用别名,您需要确保在使用别名时已通过查询定义了别名。
最直接的方法是将原始查询作为子查询处理--在本例中,

select count(*), (select * from....) as alias_column 
from table 
group by (select * from....)

成为

select count, alias_column 
from
  (select count(*) as count, (select * from....) as alias_column 
  from table)
group by alias_column

我不能谈论性能影响,但如果您试图在查询中重用别名,则可以快速编写-将所有内容放入括号中并跳到一个级别……

2w3rbyxf

2w3rbyxf5#

从Oracle 23 c开始,我们在Oracle中有GROUP BY列别名!并且您也可以在HAVING子句中使用别名。
现在可以像ORDER BY中那样使用列位置而不是使用列别名。

alter session set group_by_position_enabled = true;

您可以查看康纳的视频,其中有更详细的解释和示例:youtube.com/watch?v=dcMBwVwjZGE

41ik7eoe

41ik7eoe6#

如果你不需要使用别名,你可以这样做:

select  
EXTRACT(year from CURRENT_DATE), count(*) from something
group by EXTRACT(year from CURRENT_DATE)
order by EXTRACT(year from CURRENT_DATE)

而不是使用别名和子查询。

相关问题