[패스트캠퍼스]SQL 강의 따라하기(데이터 그룹화하기)

Jaewoo Back·2023년 7월 16일
0
post-thumbnail

📖데이터 그룹화하기

💡데이터 그룹화해서 통계 내기

GROUP BY : 컬럼에서 동일한 값을 가지는 로우를 그룹화하는 키워드

GROUP BY [컬럼 이름]
  • 주로 그룹 별 데이터를 집계할 때 사용한다.
  • GROUP BY 가 쓰인 쿼리의 SELECT 절에는 GROUP BY 대상 컬럼과 그룹 함수만 사용 가능하다.
  • 여러 컬럼으로 그룹화도 가능하다. (키워드 뒤에 [컬럼 이름]을 복수 개 입력하면 된다.
    쿼리문법
SLECT [GROUP BY 대상 컬럼 이름],...,[그룹함수]
FROM [테이블 이름]
WHERE 조건식
GROUP BY [컬럼이름]

💡그룹에 조건 주기

HAVING : 가져올 데이터 그룹에 조건을 지정해주는 키워드

  • HAVIG조건식 형식으로 사용한다
  • 조건식이 True(참)이 되는 그룹만 선택합니다
  • HAVIG 절의 조건식에서는 그룹 함수를 활용합니다.
    쿼리 문법
SELECT[컬럼 이름],...,[그룹 함수]
FORM[테이블 이름]
WHERE 조건식
GROUP BY[컬럼 이름]
HAVING 조건식;

💡다양한 그룹 함수 알아보기

COUNT : 그룹의 값 수를 세는 함수

  • COUNT([컬럼 이름]) 형식으로 SELECT, HAVING 절에서 사용한다.
  • 집계할 컬럼 이름은 그룹의 기준이 되는 컬럼 이름과 같아도 되고, 같지 않아도 된다.
  • COUNT(1) 은 하나의 값을 1로 세어주는 표현이다.
  • GROUP BY가 없는 쿼리에서도 사용 가능하다. 이때는 전체 로우에 함수가 적용된다.
    쿼리 문법
SELECT[컬럼 이름],...,COUNT([컬럼 이름])
FROM [테이블 이름]
GROUP BY[컬럼 이름]
HAVING조건문;

SUM : 그룹의 합을 계산하는 함수

  • SUM([컬럼 이름]) 형식으로 SELECT, HAVING 절에서 사용한다.
SELECT[컬럼 이름],...,SUM([컬럼 이름])
FROM [테이블 이름]
GROUP BY[컬럼 이름]
HAVING조건문;

AVG : 그룹의 평균을 계산하는 함수

  • AVG([컬럼이름]) 형식으로 SELECT, HAVING 절에서 사용한다.
    쿼리 문법
SELECT[컬럼 이름],...,AVG([컬럼 이름])
FROM[테이블 이름]
GROUP BY[컬럼 이름]
HAVING조건문;

MIN : 그룹의 최솟값을 반환하는 함수

  • MIN([컬럼 이름]) 형식으로 SELECT, HAVING 절에서 사용합니다.
    쿼리 문법
SELECT[컬럼 이름],...,MIN([컬럼 이름])
FROM[테이블 이름]
GROUP BY[컬럼 이름]
HAVING조건문;

💡[TIP] 쿼리 실행 순서 알아보기

키워드문법작성순서실행순서
SELECTSELECT[컬럼 이름]15
FROMFROM[테이블 이름]21
WHEREWHERE조건식32
GROUP BYGROUP BY[컬럼 이름]43
HAVINGHAVING조건식54
ORDER BYORDER BY[컬럼 이름]66

쿼리 실습

DROP DATABASE IF EXISTS pokemon;
CREATE DATABASE pokemon;
USE pokemon;
CREATE TABLE mypokemon (
number int,
name varchar(20),
type varchar(10),
height float,
weight float
);
INSERT INTO mypokemon (number, name, type, height, weight)
VALUES (10, 'caterpie', 'bug', 0.3, 2.9),
(25, 'pikachu', 'electric', 0.4, 6),
(26, 'raichu', 'electric', 0.8, 30),
(125, 'electabuzz', 'electric', 1.1, 30),
(133, 'eevee', 'normal', 0.3, 6.5),
(137, 'porygon', 'normal', 0.8, 36.5),
(152, 'chikoirita', 'grass', 0.9, 6.4),
(153, 'bayleef', 'grass', 1.2, 15.8),
(172, 'pichu', 'electric', 0.3, 2),
(470, 'leafeon', 'grass', 1, 25.5); 

✏️쿼리 실행 순서

쿼리

SELECT type, COUNT(1),MAX(weight)
FROM mypokemon
WHERE name LIKE'%a0%'
GROUP BY type
HAVING MAX(height)>1
ORDER BY 3;
  • 입력 순서
    1) SELECT type, COUNT(1),MAX(weight)
    2) FROM mypokemon
    3) WHERE name LIKE'%a0%'
    4) GROUP BY type
    5) HAVING MAX(height)>1
    6) ORDER BY 3;

  • 실행순서
    5) SELECT type, COUNT(1),MAX(weight)
    1) FROM mypokemon
    2) WHERE name LIKE'%a0%'
    3) GROUP BY type
    4) HAVING MAX(height)>1
    6) ORDER BY 3;
profile
https://blog.naver.com/jaewoo2_25

0개의 댓글