group by, case when
TRANSCRIPT
데이터베이스개론
SQL 2
NHN NEXT 정호영
나눔고딕 및 나눔고딕코딩 글꼴을 설치해 주세요.
수업준비
다음테이블을만들어봅시다.
https://raw.githubusercontent.com/honux77/introdb/master/sql2/etc.sql
GROUP BY ~ HAVING 명령어
(1) GROUP BY에명시된컬럼을기준으로그룹을형성하고
(2) 해당 그룹에 대해 그룹함수를 적용해서 결과를 보여줍니다.
(3) HAVING 명령어로그룹에조건을줄수도있습니다.
GROUP BY예제 1: 그룹만들고그룹함수써보기
1. 등급별인원수를구하시오.
GROUP BY예제 1: 그룹만들고그룹함수써보기
1. 등급별인원수를구하시오.
SELECT grade, COUNT(*) AS numFROM auction_userGROUP BY grade;
GROUP BY예제 2: 다양한그룹함수
2. 등급별인원수, 평균보유금액,최대보유금액을구하시오.
•자주쓰는그룹함수
- COUNT, MAX, MIN, SUM, AVG 등이있음
GROUP BY예제 2: 다양한그룹함수
2. 등급별인원수, 평균보유금액,최대보유금액을구하시오.
SELECT grade, COUNT(*) AS num, AVG(money) AS avg_moneyFROM auction_userGROUP BY grade;
GROUP BY예제 3: 조건적용
3. 다이아와브론즈등급의재산총합을각각구하시오.
GROUP BY예제 3: 조건적용
3. 다이아와브론즈등급의재산총합을각각구하시오.
SELECT grade, SUM(money) AS sum_moneyFROM auction_userWHERE grade = 'B' or grade = 'D'GROUP BY grade;
GROUP BY예제 4: 그룹함수를조건에사용
4. 전체인원수가 1650명이상이그룹을구하시오.
SELECT grade, count(*) AS num_userFROM auction_userWHERE count(*) > 1650GROUP BY grade;
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
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
예제 5.등급을숫자로바꾸고
숫자의오름차순으로정렬해서표시해주세요.
예제 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;
THANK YOU!!!