[SQL] 문법 ) GROUP BY 그룹 묶어주기 + 집계 함수 (SUM, AVG, MIN, MAX, COUNT(DISTINCT))+ 조건절 HAVING

YS_Study.log·2022년 12월 13일
0
post-custom-banner

GROUP BY

GROUP BY는 말 그대로 그룹끼리 묶어주는 것이다.

GROUP BY 절은 집계 함수와 함께 사용한다.
집계함수는 SUM(), AVG(), MIN(), MAX(),COUNT() COUNT(DISTINCT) 가 있다.

또한 조건절 WHERE 이아닌 HAVING을 사용한다.

  • buy 구매 테이블 / member 회원 테이블


GROUP BY + 집계함수

SUM()

더해주는 집계 함수

SELECT SUM(더할 열데이터 ) + FROM + 테이블명 + GROUP BY + 그룹으로 묶어줄 기준 열

  • 회원 id끼리 그룹을 묶어, 각 회원 그룹당 총 구매 개수 조회 ("별칭", as 별칭, 띄어쓰기 별칭)
    select mem_id "회원ID", sum(amount) "총 구매개수"
    from buy
    group by mem_id;
  • 아이돌 그룹 id끼리 그룹을 묶어, 총 구매금액 조회 (가격 개수 를 곱한것을 모두 더해서 )
    select mem_id "회원ID", sum(price
    amount) "총 구매금액"
    from buy
    group by mem_id;

AVG()

평균을 구해주는 집계 함수

SELECT AVG(평균낼 열 데이터 )+ FROM + 테이블명 + GROUP BY + 그룹으로 묶어줄 기준 열

  • 아이돌 그룹마다 각 평균 구매개수와, 평균 구매금액 조회
    select mem_id "회원ID", avg(amount) "평균 구매개수", avg(price * amount) "평균 구매금액" from buy
    group by mem_id;

COUNT()

행의 개수를 세어준다.

SELECT COUNT(개수 셀 특정 열 데이터 )+ FROM + 테이블명
SELECT COUNT(개수 셀 특정 열 데이터 )+ FROM + 테이블명 + GROUP BY + 그룹으로 묶어줄 기준 열

  • 모든 구매내역 개수
    select count(*) from buy;

  • 연락처가 있는 회원수 조회, 특정 열의 행 데이터 개수 조회
    select count(phone1) "연락처가 있는 회원 수"
    from member;

  • 회원 명 끼리 그룹화, 연락처가 있는 회원수 조회
    select mem_id "회원명", count(phone1) "각 회원당 갖고있는 연락처 개수"
    from member
    group by mem_id;

GROUP BY + HAVING 조건절

SELECT + 열데이터 FROM + 테이블명 + GROUP BY + 그룹으로 묶어줄 기준 열 + HAVING + 조건

  • 회원 그룹끼리 각 평균 구매금액이 1000원이 넘는 그룹만 조회
    select mem_id "회원ID", sum(price amount) "총 구매금액"
    from buy group by mem_id
    having sum(price
    amount) > 1000;

  • 위와 동일하나, order by 오름 차순 정렬
    select mem_id "회원ID", sum(price amount) "총 구매금액"
    from buy
    group by mem_id
    having sum(price
    amount) > 1000
    order by sum(price * amount) desc;

profile
느리지만 조금씩 공부하는 중 입니다. 현재 1년 6개월차 신입입니다 ><!
post-custom-banner

0개의 댓글