본문 바로가기
SQL

[SQL] 자르기

by UnoCode 2020. 9. 3.

이번 포스팅은 GROUP BY의 '자르기'에 대해서 알아보겠습니다.

 

신상정보 테이블

 

자르기 예시

 

Persons(인물)

name age height weight
김과장 30 188 90
김대리 21 167 55
김주임 87 158 48
박사장 54 187 70
박이사 39 177 120
박팀장 90 175 48
화사 25 160 53
이효리 41 182 55
이상해 12 176 90

 

해당 테이블을 이름으로 자르면 다음과 같습니다.

 

SELECT substring(name,1,1) AS label
		,COUNT(*)
FROM Persons
GROUP BY substring(name,1,1);

 

- 예시2

 

나이를 기준으로 어린이(20세 미만), 성인 (20~69세), 노인(70세 이상) 으로 파티션을 나누어 보겠습니다.

 

 

SELECT CASE WHEN age<20 THEN '어린이' 
			WHEN age between 20 and 69 THEN '성인'
            WHEN age>69 THEN '노인'
            ELSE NULL END AS age_class,
	   COUNT(*)
FROM Persons
GROUP BY CASE WHEN age<20 THEN '어린이' 
			WHEN age between 20 and 69 THEN '성인'
            WHEN age>69 THEN '노인'
            ELSE NULL END

 

 

실행 계획

 

- 예시3 (BMI 구하기) 

 

BMI = w / t 제곱

 

키는 cm 단위가 아니고 m단위 입니다.

 

실제 연예인과는 상관이 전혀~~~~~~~~~~~~ 없구 공부용 자료입니다.

SELECT CASE WHEN weight / POWER(height / 100,2) < 18.5 THEN '저체중'
			WHEN 18.5 <= weight / POWER(height / 100,2) AND weight / POWER(height / 100,2) <25 THEN '정상'
            WHEN 25 <= weight / POWER(height / 100,2) THEN '과체중'
            ELSE NULL END AS bmi,
            COUNT(*)
FROM Persons
GROUP BY CASE WHEN weight / POWER(height / 100,2) < 18.5 THEN '저체중'
			WHEN 18.5 <= weight / POWER(height / 100,2) AND weight / POWER(height / 100,2) <25 THEN '정상'
            WHEN 25 <= weight / POWER(height / 100,2) THEN '과체중'
            ELSE NULL END

 

GROUP BY 구에는 필드 이름만 적을 수 있다고 생각하는 사람들이 많은데요. 이렇게 복잡한 수식을 기준으로도 자를 수 있다는 것을

 

기억하시기 바랍니다.

 

'SQL' 카테고리의 다른 글

[SQL] 집약  (0) 2020.09.02
[SQL] 어쩔 수 없는 UNION  (1) 2020.09.01
[SQL] 조건 분기 CASE,UNION 차이  (0) 2020.08.31
[SQL] SQL 조건 분기, 집합 연산, 윈도우 함수, 갱신  (0) 2020.08.30
[SQL] DBMS 아키텍처 Part 2  (0) 2020.08.29

댓글