如何使用别名对查询进行“分组依据”,例如:
select count(*), (select * from....) as alias_column from table group by alias_column
我得到'alias_column':INVALID_IDENTIFIER错误信息。为什么?如何对该查询进行分组?
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,您将不得不稍微绕一点路,并使用嵌套查询,如上所述。
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;
wnvonmuf3#
select count(*), (select * from....) as alias_column from table group by (select * from....)
在Oracle中,不能在group by子句中使用别名。
smtd7mpg4#
要在Oracle中使用别名,您需要确保在使用别名时已通过查询定义了别名。最直接的方法是将原始查询作为子查询处理--在本例中,
成为
select count, alias_column from (select count(*) as count, (select * from....) as alias_column from table) group by alias_column
我不能谈论性能影响,但如果您试图在查询中重用别名,则可以快速编写-将所有内容放入括号中并跳到一个级别……
2w3rbyxf5#
从Oracle 23 c开始,我们在Oracle中有GROUP BY列别名!并且您也可以在HAVING子句中使用别名。现在可以像ORDER BY中那样使用列位置而不是使用列别名。
alter session set group_by_position_enabled = true;
您可以查看康纳的视频,其中有更详细的解释和示例:youtube.com/watch?v=dcMBwVwjZGE
41ik7eoe6#
如果你不需要使用别名,你可以这样做:
select EXTRACT(year from CURRENT_DATE), count(*) from something group by EXTRACT(year from CURRENT_DATE) order by EXTRACT(year from CURRENT_DATE)
而不是使用别名和子查询。
6条答案
按热度按时间vxqlmq5t1#
如果在GROUP BY子句中重复相应的表达式,分组通常会起作用。只提到别名是不可能的,因为SELECT步骤是执行查询的最后一步,分组会在别名尚未定义时发生。
要对子查询的结果进行GROUP BY,您将不得不稍微绕一点路,并使用嵌套查询,如上所述。
4szc88ey2#
将查询与别名列嵌套:
wnvonmuf3#
在Oracle中,不能在group by子句中使用别名。
smtd7mpg4#
要在Oracle中使用别名,您需要确保在使用别名时已通过查询定义了别名。
最直接的方法是将原始查询作为子查询处理--在本例中,
成为
我不能谈论性能影响,但如果您试图在查询中重用别名,则可以快速编写-将所有内容放入括号中并跳到一个级别……
2w3rbyxf5#
从Oracle 23 c开始,我们在Oracle中有GROUP BY列别名!并且您也可以在HAVING子句中使用别名。
现在可以像ORDER BY中那样使用列位置而不是使用列别名。
您可以查看康纳的视频,其中有更详细的解释和示例:youtube.com/watch?v=dcMBwVwjZGE
41ik7eoe6#
如果你不需要使用别名,你可以这样做:
而不是使用别名和子查询。