[SQL 레벨업] 13강 자르기

2024. 1. 23. 20:55·BOOK/SQL 레벨업

13강 | 자르기

정리

  • Group By 구의 기능
    • 자르기
    • 집약
  • 키(기준)에 따른 자르기
    • 단순한 필드뿐만 아니라, CAS와 같이 복잡한 수식을 기준으로도 자를 수 있다.
    • GROUP BY 구와 SELECT 구에 모두 적을 수 있다.
  • PARTITION BY 구를 사용한 자르기
    • GROUP BY의 집약 기능을 제외하면 실질적인 기능에 차이가 없음(차이점 : PARTITION BY는 기존 행의 세세한 정보가 그대로 남은 채로 나뉨 → 집약이 안되기 때문 !!)
    • CASE,계산식 등 복잡한 기준을 사용할 수 있음

예제문제 1

Persons 테이블에서 첫문자 알파벳마다 몇명의 사람이 존재하는지 계산하여야 한다.

  • Persons 테이블

 

  • 생성
CREATE TABLE Persons (
    name VARCHAR(255),
    age INT,
    height INT,
    weight INT
);

INSERT INTO Persons (name, age, height, weight) VALUES
('Anderson', 30, 188, 90),
('Adela', 21, 167, 55),
('BATES', 887, 158, 48),
('BILL', 39, 177, 120),
('Chris', 90, 175, 4);
  • 계산
select substring(name,1,1) as label , count(*)
from Persons
group by label;
  • 결과

 

 

예제문제 2

Persons 테이블에서 나이대별로 잘라야 한다.

  • 계산
SELECT CASE WHEN age<20 THEN '어린이'
WHEN age BETWEEN 20 AND 69 THEN '성인'
WHEN age>=70 THEN '노인' 
ELSE NULL END AS age_class, COUNT(*)
FROM Persons
GROUP BY age_class;
  • 결과

 

 

  • PARTITION BY에 식을 지정하여 자르기
SELECT name,age, CASE WHEN  age < 20 THEN '어린이'
	WHEN age BETWEEN 20 AND 69 THEN '성인'
	WHEN age >= 70 THEN '노인'
	ELSE NULL END AS age_class,
	RANK() OVER(PARTITION BY CASE WHEN  age < 20 THEN '어린이'
		WHEN age BETWEEN 20 AND 69 THEN '성인'
		WHEN age >= 70 THEN '노인'
		ELSE NULL END ORDER BY age) AS age_rank_in_class
FROM Persons
ORDER BY age_class, age_rank_in_class;
  • 결과

 


GROUP BY와 SELECT 관계가 가끔 이해 안될 때 있었는데, 예제를 직접 실습하고 정리하다보니 이해 안됐던 부분들이 이해되어 속이 시원했다..! 각 장마다 실습하고 정리하느랴 책의 완독이 늦어져 정리하지 말까 고민도 했었지만.. 역시나 읽고 직접 실습하고 정리까지해야 내것으로 만든 기분이 든다..ㅎㅎ 늦더라도 꾸준히 공부해서 많은 걸 얻어가고 싶다.

'BOOK > SQL 레벨업' 카테고리의 다른 글

[SQL 레벨업] 16강 SQL에서는 반복을 어떻게 표현할까?  (1) 2024.01.27
[SQL 레벨업] 15강 반복계의 공포  (1) 2024.01.25
[SQL 레벨업] 12강 집약  (0) 2024.01.10
[SQL 레벨업] 10강 UNION이 필요한 경우  (1) 2024.01.04
[SQL 레벨업] 9장 집계와 조건분기  (0) 2023.12.13
'BOOK/SQL 레벨업' 카테고리의 다른 글
  • [SQL 레벨업] 16강 SQL에서는 반복을 어떻게 표현할까?
  • [SQL 레벨업] 15강 반복계의 공포
  • [SQL 레벨업] 12강 집약
  • [SQL 레벨업] 10강 UNION이 필요한 경우
gani+
gani+
꾸준히 기록할 수 있는 사람이 되자 !
  • gani+
    Gani_Dev :)
    gani+
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • 당장 프로젝트 (2)
        • 트러블슈팅 (0)
      • 댕댕어디가 프로젝트 (11)
        • 트러블슈팅 (3)
        • MSA (8)
      • 개발일지 (2)
      • BOOK (12)
        • SQL 레벨업 (10)
      • 프로젝트 (0)
      • ELK (5)
      • 알고리즘 (9)
      • CS (2)
        • 디자인패턴 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이것이코딩테스트다
    순차탐색
    9095
    후기
    dfs
    완전탐색
    이것이 코딩 테스트다
    플로이드워셔
    다이나믹프로그래밍
    다익스트라
    소마
    백준4963
    4673
    알고리즘
    이진탐색
    4963
    14기
    백준
    SW마에스트로
    SWMaestro14
    정렬
    최단경로
    해쉬
    DP
    섬의개수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gani+
[SQL 레벨업] 13강 자르기
상단으로

티스토리툴바