group by, case when

15
데이터베이스 개론 SQL 2 NHN NEXT 정호영 나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

Upload: hoyoung-jung

Post on 13-Jul-2015

259 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GROUP BY, CASE WHEN

데이터베이스개론

SQL 2

NHN NEXT 정호영

나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.

Page 2: GROUP BY, CASE WHEN

수업준비

다음테이블을만들어봅시다.

https://raw.githubusercontent.com/honux77/introdb/master/sql2/etc.sql

Page 3: GROUP BY, CASE WHEN

GROUP BY ~ HAVING 명령어

(1) GROUP BY에명시된컬럼을기준으로그룹을형성하고

(2) 해당 그룹에 대해 그룹함수를 적용해서 결과를 보여줍니다.

(3) HAVING 명령어로그룹에조건을줄수도있습니다.

Page 4: GROUP BY, CASE WHEN

GROUP BY예제 1: 그룹만들고그룹함수써보기

1. 등급별인원수를구하시오.

Page 5: GROUP BY, CASE WHEN

GROUP BY예제 1: 그룹만들고그룹함수써보기

1. 등급별인원수를구하시오.

SELECT grade, COUNT(*) AS numFROM auction_userGROUP BY grade;

Page 6: GROUP BY, CASE WHEN

GROUP BY예제 2: 다양한그룹함수

2. 등급별인원수, 평균보유금액,최대보유금액을구하시오.

•자주쓰는그룹함수

- COUNT, MAX, MIN, SUM, AVG 등이있음

Page 7: GROUP BY, CASE WHEN

GROUP BY예제 2: 다양한그룹함수

2. 등급별인원수, 평균보유금액,최대보유금액을구하시오.

SELECT grade, COUNT(*) AS num, AVG(money) AS avg_moneyFROM auction_userGROUP BY grade;

Page 8: GROUP BY, CASE WHEN

GROUP BY예제 3: 조건적용

3. 다이아와브론즈등급의재산총합을각각구하시오.

Page 9: GROUP BY, CASE WHEN

GROUP BY예제 3: 조건적용

3. 다이아와브론즈등급의재산총합을각각구하시오.

SELECT grade, SUM(money) AS sum_moneyFROM auction_userWHERE grade = 'B' or grade = 'D'GROUP BY grade;

Page 10: GROUP BY, CASE WHEN

GROUP BY예제 4: 그룹함수를조건에사용

4. 전체인원수가 1650명이상이그룹을구하시오.

SELECT grade, count(*) AS num_userFROM auction_userWHERE count(*) > 1650GROUP BY grade;

Page 11: GROUP BY, CASE WHEN

GROUP BY예제 4: 그룹함수를조건에사용

4. 전체인원수가 1650명이상이그룹을구하시오.

*group by의조건은 having으로기술하는게정석

* 집합함수는 having으로만가능합니다

SELECT grade, count(*) AS num_userFROM auction_userWHERE count(*) > 1650GROUP BY grade;

SELECT grade, count(*) AS num_userFROM auction_userGROUP BY gradeHAVING count(*) > 1650

Page 12: GROUP BY, CASE WHEN

CASE WHEN

1. 일반프로그래밍언어의 switch - case와유사합니다.

2. CASE ~ WHEN …자체가하나의값처럼동작합니다.

CASE case_valueWHEN when_value THEN statement_list[WHEN when_value THEN statement_list] ...[ELSE statement_list]

END CASE

Page 13: GROUP BY, CASE WHEN

예제 5.등급을숫자로바꾸고

숫자의오름차순으로정렬해서표시해주세요.

Page 14: GROUP BY, CASE WHEN

예제 5.등급을숫자로바꾸고

숫자의오름차순으로정렬해서표시해주세요.

SELECT name, grade,CASE grade

WHEN 'D' THEN '1'WHEN 'P' THEN '2'WHEN 'G' THEN '3'ELSE '4'

END AS new_grade FROM auction_userORDER BY new_grade;

Page 15: GROUP BY, CASE WHEN

THANK YOU!!!