3. 집계함수
1) 기본적인 집계함수
avg() : null값이 아닌 모든 입력 값의 평군
count(*) : 입력한 로우의 총 개수
count() : null값이 아닌 모든 입력 로우 값의 개수
max() : null값이 아닌 모든 입려 값의 최댓값
min() : null값이 아닌 모든 입력 값의 최솟값
sum() : null값이 아닌 모든 입력 값의 합산값
-GROUP BY절 없이 WHERE 명령어 다음에는 집게함수를 사용할 수 없다
따라서 서브쿼리를 사용해서 서브쿼리 안의 SELECT부분에서 집계함수를 사용한다
-쿼리문은 서브쿼리를 먼저 처리하기 때문에 메인쿼리에 WHERE 명령어 이전에 집계함수를 처리한다
EX) SELECT item_type, item_id
FROM rating
WHERE rating = (
SELECT max(rating) FROM rating
);
-데이터가 없는 컬럼에 집계함수를 사용하면 반환하는 어떤 값은 있지만 표시되어 있지 않는다
아루런 결과도 출력시키진 않지만 어느 로우 데이터가 1개는 있다고 이해하자
2) 불리언 연산 집계함수
-불리언 연산을 하는 집계함수는 데이터 타입이 불리언일 때 사용 가능하다
bool_and() : 입력된 데이터가 모두 참이면 참을 출력
bool_or() : 입력한 데이터 중 하나라도 참이면 참을 출력
every() : bool_and 함수와 동일한 기능이다
-보통 불리언 집계함수를 사용할 때는 WHERE절을 이용해 원하는 범위를 두고 데이터를 출력한다
3) 배열을 담는 집계함수
array_agg()
-베열로 연결된 null 값을 포함한 입력 값
-더 높은 차원의 배열로 연결된 입력 배열
4) JSON 집계함수
json_agg() : null을 포함해 json배열로 집계한 값
jsonb_agg() : null을 포함해 jsonb배열로 집계한 값
-일반적인 json으로 출력하면 컬럼의 데이터는 중괄호로 데이터가 저장되어 있는다.
즉, json타입으로 데이터가 존재한다
-json타입의 데이터를 json_agg 함수로 집계하면 데이터가 배열에 담겨서 출력된다
-json타입의 데이터를 jsonb_agg 함수로 집계하면 데이터가 한 줄로 배열에 담겨서 출력된다
즉, json타입 데이터를 jsonb_agg함수로 집계하면 jsonb 형태의 배열로 출력되는 것이다
-json 데이터를 json_agg집계함수를 사용하면 json 데이터 그대로인 상태에서 배열에 담겨서 출력된다
-json 데이터를 jsonb_agg집계함수를 사용하면 텍스트를 이진형태로 분리 후 배열에 담겨서 출력된다
-jsonb 데이터는 처음부터 이진 형태로 분리된 상태에서
json_agg함수나 jsonb_agg함수를 사용했기 때문에 츨력결과가 동일하다
json_object_agg(key, value) : name-value 쌍을 json개체로 집계한 값
value은 null을 표함, name은 포함하지 않는다
jsonb_object_agg(key, value) : name-value 쌍을 json개체로 집계한 값
value은 null을 표함, name은 포함하지 않는다
-json_object_agg 집계함수는 키-값 형태로 만든다
보통, 기준이 되는 번호를 key로 잡고 데이터를 value로 지정한다
-json_object_agg 와 jsonb_object_agg의 차이점은 jsonb는 이진형태로 분해한 후 다시 출력한다
둘의 코드를 비교해 보면 jsonb_object_agg 컬럼의 각 로우마다 일부 공백이 사라져 있다
출력결과를 보면 공백말고는 달라진게 없다고 느껴지지만, 공백이 있고 없고 차이는
서버와 연결하여 개발할 때 오류를 발생시키거나 원하는 결과를 다르게 출력할 수 있다
카테고리 없음
5. 데이터의 집계 및 결합_2
728x90
728x90