按别名分组(Oracle)

时间:2008-11-06 12:04:11

标签: sql oracle

如何使用别名“分组”查询,例如:

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

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

5 个答案:

答案 0 :(得分:59)

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,您将需要稍微绕道并使用嵌套查询,如上所示。

答案 1 :(得分:7)

使用别名列嵌套查询:

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;

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

要在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 

我无法谈论性能影响,但是如果您尝试在查询中重复使用别名,则可以非常快速地写出来 - 将所有内容都放在括号中并跳起来......

答案 4 :(得分:0)

如果您不必使用别名,可以这样做:

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

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