[SQL]Group by, Having, 집계함수

2023. 5. 23. 16:18· DB/SQL

✅ Group by

  • 데이터를 컬럼별로 그룹화 해주는 역할
  • 주로 집계 함수와 같이 사용되곤 한다
  • NULL 값을 가진 행을 제외하고 수행한다. 

 

[형태]

SELECT <column_name> FROM <table_name> WHERE <condition> GROUP BY <column_name> HAVING <condition>

 

[예제] 회원별로 묶어준 후, 구매한 개수 합치기

select mem_id,count(mem_id) from buy group by mem_id;

 

[예제] 프로그래머스 - 고양이와 개는 몇 마리 있을까

: ANIMAL_INS 테이블에서 ANIMAL_TYPE 컬럼을 기준으로 유형을 분류하는데, 이때 고양이와 개의 수를 카운팅한다.

select ANIMAL_TYPE, count(ANIMAL_TYPE) as count from ANIMAL_INS group by ANIMAL_TYPE

 

[예제] 프로그래머스 - 주문량이 많은 아이스크림들 조회하기

: 

select F.FLAVOR  
from (FIRST_HALF F join JULY J on F.FLAVOR = J.FLAVOR )  # 두 테이블을 FLAVOR을 기준으로 조인한다.
group by F.FLAVOR # 7월은 두 공장에서 하나의 아이스크림 가게로 출하하는 경우가 있어서 중복되는 FLAVOR 행이 있다. 떄문에 group by를 통해 모든 FLAVOR을 하나의 행으로 묶어준다.
order by sum(F.TOTAL_ORDER+J.TOTAL_ORDER)  desc # 정렬 기준은 상반기와 7월의 주문량 더한 값이 큰 순서대로
limit 3 # 상위 3개만 조회

 

왼) group by 이전, 오) group by이후

 

 

✅ Having

- 집계 함수에 대해 조건을 제한하는 것임

<having과 where 구별>

having where 
그룹 필터 일반 행 필터
그룹화,집계 발생한 후에 조건 필터됨 그룹화,집계 발생하기 전에 조건 필터

 

SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할 컬럼 HAVING 조건식;

 

[예제]  mem_id 기준으로 그룹화 하면서 총 구매액을 구하는데, 그 총 구매금액이 1000 이상인 것만 출력

 select mem_id, sum(price*amount) as "총 구매금액" from buy
 group by mem_id
 having  sum(price*amount )> 1000 -- 그룹함수가 포함된 조건

 

 

✅ 집계 함수

SUM() : 합계 계산

AVG() : 평균 계산

MIM() : 최소값 구하기

MAX() : 최대값 구하기

COUNT() : 행의 개수 세기

COUNT(DISTINCT) : 행의 개수 세기 (중복제거하고 카운트함)

SELECT count(mem_id) FROM buy; -- 결과 : 12
SELECT count(DISTINCT(mem_id)) FROM buy; -- 결과 : 4

buy 테이블


참고자료

https://extbrain.tistory.com/56

'DB > SQL' 카테고리의 다른 글

[SQL] 행 입력, 수정, 삭제 CRUD  (0) 2023.05.30
[SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력  (0) 2023.05.30
[SQL] join, on  (0) 2023.05.25
[SQL] 서브쿼리 - TODO  (0) 2023.05.21
DB 기초개념  (0) 2023.05.17
'DB/SQL' 카테고리의 다른 글
  • [SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력
  • [SQL] join, on
  • [SQL] 서브쿼리 - TODO
  • DB 기초개념
journey-dev
journey-dev
journey-devjourney-dev 님의 블로그입니다.
journey-dev
journey-dev
journey-dev
전체
오늘
어제
  • 분류 전체보기 (63)
    • 프론트엔드 (17)
      • JS (8)
      • React (8)
      • vue (9)
      • Typescript (2)
    • 개발서적 (1)
      • 코어 자바스크립트 (0)
      • 프론트엔드 성능 최적화 가이드 (1)
    • CS (4)
      • Docker (0)
      • 자료구조&알고리즘 (2)
      • 네트워크 (2)
    • DB (11)
      • SQL (11)
    • GIT (0)
    • GIS (3)
    • 개발일기 (0)
    • ing (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 일단 시작해라. 나중에 완벽해지면 된다.

인기 글

태그

  • 리액트 복기하기!

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
journey-dev
[SQL]Group by, Having, 집계함수
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.