2008-11-06 60 views
25

如何使用别名,比如查询“按组”:集团通过别名(甲骨文)

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

我得到“alias_column”:INVALID_IDENTIFIER错误消息。为什么?如何分组这个查询?

回答

54
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子查询的结果,您将不得不稍微绕行并使用嵌套查询,如上所述。

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; 
1
select count(*), (select * from....) as alias_column 
from table 
group by (select * from....) 

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

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 

我不能表现说话的含义,但如果你试图在查询中重新使用别名,它的写法会非常快 - 将所有内容都放在括号内并跳起一级...