MySQL - 그룹화

김소희·2024년 8월 7일

MySQL

목록 보기
2/17

📏 GROUP BY - 그룹화

-- mem_id가 같은 데이터를 그룹으로 묶음
-- 그룹핑된 데이터에서 mem_id와 amount의 합계를 구함
SELECT mem_id, SUM(amount) AS "합계"
	FROM buy
  	GROUP BY mem_id
  	ORDER BY mem_id;
  • 컬럼이 같은 데이터를 그룹화 해주는 기능
  • 보통 집계 함수와 같이 쓰임
SELECT genre, AVG(price) AS "평균"
	FROM library
  	GROUP BY genre;

GROUP BY(genre) 예시

  • GROUP BY 로 지정한 컬럼이 같은 데이터끼리 그룹화
  • 여러 컬럼 지정 가능

집계 함수 (Aggregate Function)

  • SUM() : 컬럼의 합계를 반환
  • AVG() : 컬럼의 평균을 반환
  • MIN() : 컬럼의 최소값을 반환
  • MAX() : 컬럼의 최대값을 반환
  • COUNT() : 행의 개수를 셈
  • COUNT(DISTINCT) : 행의 개수를 셈
-- 집계 함수 안에서 연산도 가능
SELECT mem_id, SUM(amount*price) AS "총 금액"
	FROM buy
    GROUP BY mem_id
    ORDER BY mem_id;
  • 집계 함수 내에서 사칙 연산도 가능하다.

COUNT()

-- member 테이블의 모든 데이터 개수를 셈
SELECT COUNT(*) 
	FROM member;
    
-- member 테이블의 phone1 컬럼이 NULL인 것을 제외한 모든 데이터 개수를 셈
SELECT COUNT(phone1) 
	FROM member;
  • COUNT(*) 연산은 모든 row를 대상으로 이루어지기 때문에 NULL값이 포함되어있어도 카운트됨
  • COUNT(phone1) 연산은 phone1 값에 NULL이 있을 경우 카운트하지 않음

📏 HAVING - 그룹 조건

-- mem_id 를 기준으로 그룹화
-- 그룹화된 데이터를 기준으로 amount*price 합계가 1000 이상인 그룹만 남김
-- 조건에 걸러진 그룹에서 amount*price 의 합계를 조회
SELECT SUM(amount*price) AS "총 금액"
	FROM buy
    GROUP BY mem_id
    HAVING SUM(amount*price) >= 1000;
  • 그룹화된 데이터에 대해서 조건을 제한함
  • GROUP BY 뒤에 와야함

0개의 댓글