스마트웹앱콘텐츠전문가/데이터베이스
[PostgreSQL]GROUP BY JSON
9D4U
2021. 12. 7. 15:08
728x90
반응형
GROUP BY 구문에서
사용할 수 있는 함수들이 여러 가지가 있겠지만,
흔히 알려진 것은 집계함수 입니다.
평균(AVG), 최대(MAX), 최소(MIN) 등....
그 외에도, xxx_agg() 라고 하는 함수도 사용할 수 있습니다.
PostgreSQL에서 지원하는 agg 함수는
json_object_agg, array_agg, string_agg 등이 있습니다.
반응형
1. json_object_agg() : 해당 그룹 안에 있는 요소를 키, 값 형태로 출력하고 싶을 때 사용합니다.(JSON 형태로 출력)
id | point | subject |
A1 | 10 | A |
B1 | 20 | B |
B2 | 30 | B |
C1 | 40 | C |
> select
subject,
max(point),
json_object_agg(id, point)
from table1 t1
group by subject
A | 10 | {"A1":10} |
B | 30 | {"B1": 20, "B2": 30} |
C | 40 | {"C1": 40} |
2. array_agg() : 해당 그룹 안에 있는 요소를 배열 형태로 출력하고 싶을 때 사용합니다.
> select
subject,
max(point),
array_agg(id)
from table1 t1
group by subject
A | 10 | {A1} |
B | 30 | {B1,B2} |
C | 40 | {C1} |
※ PostgreSQL에서 배열의 기본 형태는 [~] 이 아닌 {~} 형태임을 주의.
( [~]형태로 출력하고 싶을 땐, json_agg() )
3. string_agg() : 해당 그룹 안에 있는 요소를 문자를 나열하는 형태로 출력하고 싶을 때 사용합니다.
> select
subject,
max(point),
string_agg(id, ',')
from table1 t1
group by subject
A | 10 | A1 |
B | 30 | B1,B2 |
C | 40 | C1 |
728x90