본문 바로가기

카테고리 없음

5. 데이터의 집계 및 결합_2

728x90

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 컬럼의 각 로우마다 일부 공백이 사라져 있다
               출력결과를 보면 공백말고는 달라진게 없다고 느껴지지만, 공백이 있고 없고 차이는 
               서버와 연결하여 개발할 때 오류를 발생시키거나 원하는 결과를 다르게 출력할 수 있다

728x90