programing

에일리어스별 그룹화(Oracle)

batch 2023. 4. 1. 08:37
반응형

에일리어스별 그룹화(Oracle)

별칭을 사용하여 쿼리를 '그룹화'하는 방법. 예:

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

'alias_column' : INVALID_IDENTIFIER 오류 메시지가 나타납니다.왜요? 이 쿼리를 어떻게 그룹화할까요?

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 스텝은 쿼리 실행의 마지막 단계이기 때문에 그룹화는 에일리어스 이름이 아직 정의되어 있지 않은 경우에 실행됩니다.

하위 쿼리의 결과를 기준으로 그룹화하려면 위에서 설명한 것처럼 약간 우회하여 중첩된 쿼리를 사용해야 합니다.

에일리어스 컬럼에 쿼리를 네스트합니다.

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

Oracle에서는 그룹 기준 절에 별칭을 사용할 수 없습니다.

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 

퍼포먼스의 의미에 대해서는 말할 수 없지만, 쿼리에서 에일리어스를 재사용하려고 할 때는 매우 빠르게 기입할 수 있습니다.모든 것을 괄호 안에 넣고 한 단계 위로 점프합니다.

에일리어스를 사용할 필요가 없는 경우는, 다음과 같이 실시할 수 있습니다.

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

에일리어스와 서브쿼리를 사용하는 대신.

언급URL : https://stackoverflow.com/questions/268429/group-by-alias-oracle

반응형