如何使用别名“分组”查询,例如:
select count(*), (select * from....) as alias_column
from table
group by alias_column
我得到'alias_column':INVALID_IDENTIFIER错误消息。为什么?如何对此查询进行分组?
答案 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)
而不是使用别名和子查询。