LIST-TAG 아니고 LIST-AGG (aggregation)
그룹바이랑 같이 쓰는 함수
메모: list to str 같은 느낌
예를 들어서 내가 날린 쿼리와 결과가 다음과 같다고 하자
SELECT grade, name
FROM students
GROUP BY grade, name
ORDER BY grade
grade | name |
---|---|
A | KIM |
A | LEE |
A | PARK |
B | CHOI |
C | KANG |
이때 등급이 A인 학생을 문자열 하나로 합쳐서 보여주고 싶다.
[KIM, LEE, PARK]
이런느낌으로
SELECT
grade,
LISTAGG(name, ', ') WITHIN GROUP(ORDER BY name ASC) AS names
FROM students
GROUP BY grade
grade | names |
---|---|
A | KIM, LEE, PARK |
B | CHOI |
C | KANG |
이런 결과가 나온다.
LISTAGG의 두번째로 들어가는 문자열이 값과 값 사이의 구분자가 된다.
이때 주의할 점은 GROUP BY
가 있어야 한다는 거
그리고 자동으로 중복 제거가 되지 않는다. 어떻게 보면 리스트 값을 전부 문자열로 만드는거니까 당연하다고 볼 수 있다. names에 표출되는 항목에 중복이 없길 바란다면 추가적으로 처리해야 한다.