본문 바로가기

Oracle/SQL

SQL 데이터 분석함수 - 데이터 가로출력 Listagg (컬럼명,',') within group(order by~ desc/asc )

LISTAGG(가로로 출력하기)

→ group by 절을 반드시 써야한다.

예제 : 부서번호를 출력, 해당부서번호별로 속한 사원들의 이름을 가로로 출력

select deptno, listagg(ename, ',') within group (order by ename asc)
from emp 
group by deptno;
  1. 분석함수 ( ) 에 괄호에 무언가 채워넣어져 있다면 within group 을 사용해야한다.
  2. 이름과 이름사이는 ',' , 콤마로 구분하겠다.
  3. 어떻게 가로로 출력 하는가??

→ within group ( order by 컬럼명 asc or desc)를 쓰지 않고 listagg 만 써도 데이터 결과는 나오지만, 출력되는 결과를 정렬해서 가로로 나오게 하고싶다면 within group ( order by 컬럼명 asc or desc) 를 쓰면 된다.

  1. 데이터 분석함수 중 유일하게 group by 절이 필수로  필요하다.

→ 부서번호별로 이름을 가로로 출력하는것 이기때문에 부서번호별로 group by 절로 그루핑 해준다.

문제 184 : 직업, 직업별로 속한 사원들의 이름을 가로로 출력 월급이 높은 사원순으로 출력

select job, listagg(ename, ',') within group (order by sal desc) 
from emp 
group by job;

문제 185 : emp14_address 를 쿼리 하는데, address2 출력, 그옆에 address2 주소에 속한 학생들의 이름을 가로로출력하고, 나이가 높은 학생순으로 출력

select address2, listagg(ename, ',') within group(order by age desc) as 학생들 
from emp14_address 
group by address2;

문제 186 : 위의 출력결과 에서 이름옆에 ( 나이 ) 가 출력 되도록 하세요

select address2, listagg(ename||'('||age||')', ',') within group(order by age desc)as 학생들 
from emp14_address
group by address2;