• SQL GROUP BY절

    2021. 5. 31.

    by. Jacob Lee

    728x90

     


     

    GROUP BY절

    SQL에서 GROUP BY절은 같은 값을 가진 행들을 그룹 지어준다.

    GROUP BY절은 aggregate 함수를 하나 이상의 결과로 그룹 짓기 위해 같이 자주 사용된다.

     

    GROUP BY의 기본 문법은 다음과 같다.

    SELECT column_name
    FROM table_name
    WHERE condition
    GROUP BY column_name
    ORDER BY column_name;

    위처럼 GROUP BY절은 FROM, 혹은 WHERE문 다음에 위치해야 한다.

     

    GROUP BY 주의 할 점

    SELECT문과 GROUP BY

    SELECT문에서 컬럼은 반드시 aggregate 함수를 가지고 있거나 GROUP BY절 안에 위치하고 있어야 한다.

    SELECT company, division, SUM(sales)
    FROM finance_table
    GROUP by company, division;

     

    WHERE문과 Aggregation 함수

    WHERE문은 절대 aggregation 함수의 결과를 참조하면 안 된다.

    대신 나중에 배울 HAVING절을 aggregation과 사용할 수 있다.

    SELECT company, division, SUM(sales)
    FROM finanace_table
    WHERE division IN ('marketing', 'transport')
    GROUP BY company, division;

     

    ORDER BY와 Aggregation 함수

    만약 aggregate 함수의 값을 기반으로 정렬하고 싶다면, ORDER BY를 사용할 때 아래처럼 함수 전체를 참조해야 한다.

    SELECT company, SUM(sales)
    FROM finance_table
    GROUP BY company
    ORDER BY SUM(sales)
    LIMIT 5;

     

    GROUP BY 사용하기

    우선 한번 payment라는 테이블에서 GROUP BY를 단순히 사용해보자.

    SELECT customer_id 
    FROM payment
    GROUP BY customer_id;

    고객이 결제할 때마다 쌓이는 결제 테이블에서 위 같은 요청을 보내면 유저당 주문이 여러 개라도 고객 id가 하나씩 조회될 것이다. 이렇게 사용하면 SELECT DISTINCT와 같은 기능이 된다.

     

    다음으로는 위 구조에서 유저당 총 주문금액(sum)이 얼마인지를 조회해보자.

    SELECT customer_id, SUM(amount)
    FROM payment
    GROUP BY customer_id
    ORDER BY SUM(amount) DESC;

    위와 같이 요청을 보낼 때, 유저는 distinct 하게, 즉 하나씩 출력이 되고 유저 당 총 주문 금액이 같이 표시된다 (다시 한번 aggregation 함수와 ORDER BY를 사용할 때 함수 전체를 참조해야 하는 것을 잊지 말자).

    SUM뿐만 아니라 COUNT 등 다른 집계 함수도 사용이 가능하다.

     

    더 나아가서 고객 아이디, 그리고 결제를 받은 스태프 아이디 당 총 결제 금액을 조회하는 쿼리를 요청해보자.

    SELECT customer_id, staff_id, SUM(amount)
    FROM payment
    GROUP BY staff_id, customer_id 
    ORDER BY staff_id, customer_id DESC;

    위 같은 요청에서, 스태프 아이디, 그리고 고객 아이디 당 총 주문 금액을 확인할 수 있게 되고, 정렬 또한 가능한 것을 확인할 수 있다.

     

     

    728x90

    'Back-end > SQL' 카테고리의 다른 글

    SQL AS 키워드  (0) 2021.06.01
    SQL HAVING절  (0) 2021.05.31
    SQL Aggregate 함수 (AVG, COUNT, MAX, MIN, SUM)  (0) 2021.05.31
    SQL LIKE & ILIKE연산자  (0) 2021.05.30
    SQL IN 연산자  (0) 2021.05.30

    댓글