按别名分组 (Oracle)
Posted
技术标签:
【中文标题】按别名分组 (Oracle)【英文标题】:Group by alias (Oracle) 【发布时间】:2008-11-06 12:04:11 【问题描述】:如何使用别名对查询进行“分组”,例如:
select count(*), (select * from....) as alias_column
from table
group by alias_column
我收到 'alias_column' : INVALID_IDENTIFIER 错误消息。为什么?如何对这个查询进行分组?
【问题讨论】:
【参考方案1】: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,您必须绕道而行并使用嵌套查询,如上所述。
【讨论】:
【参考方案2】:用别名列嵌套查询:
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;
【讨论】:
【参考方案3】:select count(*), (select * from....) as alias_column
from table
group by (select * from....)
在 Oracle 中,您不能在 group by 子句中使用别名。
【讨论】:
【参考方案4】:要在 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
我无法谈论对性能的影响,但如果您尝试在查询中重用别名,写起来会非常快 - 将所有内容放在括号中并提升一个级别...
【讨论】:
【参考方案5】:如果您不必使用别名,您可以这样做:
select
EXTRACT(year from CURRENT_DATE), count(*) from something
group by EXTRACT(year from CURRENT_DATE)
order by EXTRACT(year from CURRENT_DATE)
而不是使用别名和子查询。
【讨论】:
以上是关于按别名分组 (Oracle)的主要内容,如果未能解决你的问题,请参考以下文章