IT/[SQL] Basic
cross join unnest 쉬운 예제 / 나열된 데이터 1개를 전체 행으로 나타내기
carpe08
2024. 1. 14. 18:22
320x100
AWS Athena 에서
아래와 같이 콤마(Comma)로 구분되어 한 행에 3개의 데이터가 나열되어 있다고 가정하자.
fruit |
사과, 수박, 참외 |
한 행에 있는 데이터를 아래와 같이 3개의 행으로 나타내고 싶은 경우 어떻게 하면 될까?
fruit |
사과 |
수박 |
참외 |
Cross JOIN : 카티션 곱(CARTESIAN PRODUCT)
한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능입니다.
상호 조인 결과의 전체 행 개수는 두 테이블의 각 행 의 개수를 곱한 수만큼 됩니다.
우선 아래와 같이 split 함수를 쓰게 되면
WITH t AS (
SELECT '사과,수박,참외' AS fruit
)
SELECT split(t.fruit, ',')
Array 형식으로 결과값이 나온다.
[사과, 수박, 참외]
|
끝으로 cross Join unnest 를 사용하게 되어 아래와 같은 최종 코드로 마무리 한다.
WITH t AS (
SELECT '사과,수박,참외' AS fruit
)
SELECT value
FROM t
CROSS JOIN UNNEST(split(t.fruit, ',')) as x(value)
결과값
320x100
320x100