특정 그룹을 뽑고 싶으면 WHERE 써서 필터링하면 되는데
그룹 별로 뽑고 싶으면 GROUP BY 문법을 사용하면 편리하다
SELECT 고객등급 FROM card
GROUP BY 고객등급
고객등급 카테고리끼리 그룹이 지어진 것을 볼 수 있다.
SELECT 고객등급, COUNT(고객명) FROM card
GROUP BY 고객등급
집계함수를 더해서 각 등급마다 고객이 몇 명인지 출력할 수 있다.
SELECT 고객등급, AVG(사용금액) FROM card
GROUP BY 고객등급
각 등급마다 평균 사용금액이 얼마인지 출력할 수 있다.

category column은 여러 항목 중 어떤 항목에 속하는지 분류하기 위해 만든 컬럼이다.
이 테이블에서는 고객등급이 category column에 가장 가깝다.
가격이나 재고 컬럼도 category column이라고 볼 수 있지만, 중복된 데이터들이 많아서 그룹을 지을 수 있는 컬럼이 좋다.
GROUP BY로 그룹지어서 출력한 것도 필터링할 수 있는데
뒤에 HAVING 조건문을 쓰면 된다.
GROUP BY 뒤에만 붙일 수 있는 특별한 조건문이다.
SELECT 고객등급, COUNT(고객명) FROM card
GROUP BY 고객등급
HAVING 고객등급 = 'vip'
아까 출력한 3개의 행 중에 고객등급 = "vip"인 1개의 행만 필터링해준다.
HAVING과 WHERE은 용도가 비슷하다. 둘 다 조건에 맞는 것만 필터링하는 문법이다.
SELECT 고객등급, COUNT(고객명) FROM card
WHERE 연체횟수 = 0
GROUP BY 고객등급
HAVING 고객등급 = 'vip'
위의 코드는
연체횟수가 0인 행을 필터링하고
그 결과를 고객등급으로 그룹화하고
그 결과를 고객등급 = "vip"인 행만 필터링해서
고객등급과 각 고객등급에 고객이 몇명인지 출력한다.