GROUP BY

tpids·2024년 6월 10일

DB

목록 보기
14/25

GROUP BY : 특정 컬럼을 기준으로 그룹화

  • 집계를 편하게 하기 위해 GROUP BY 문법을 이용
  • GROUP BY는 특정 조건에 어울리는 튜플끼리 묶어서 그룹화
  • GROUP BY 로 그룹화 한 결과는 출력되는 튜플(행)이 감소
    따라서 그룹화되지 않은 다른 컬럼과 나란히 사용 불가능!!!
  • 집계함수로 처리한 컬럼은 HAVING , ORDER BY , SELECT 에도 입력 가능

집계함수

  • COUNT() , AVG() , SUM() , MAX() , MIN()
  • GROUP BY 가 없어도 집계함수 사용 가능 -> 모든 튜플을 하나의 그룹으로 판단

실습 문제

-- 실습문제
-- 1. 성적표 테이블에서 학생별로 평균점수를 출력해주세요.
-- 이때 소수점 1자리 까지만 출력되도록 ROUND 함수도 활용해보세요. (ROUND(평균을 뽑은값,1)
SELECT 학생ID, ROUND(AVG(성적),1) AS 평균점수
FROM 성적표
GROUP BY 학생ID;

-- 2. 직원 테이블에서 모든 직원 중에 최고연봉과 최저연봉을 출력해주세요.
SELECT MAX(연봉) AS 최고연봉, MIN(연봉) AS 최저연봉
FROM 직원;

-- 3. 수강생정보 테이블에서 각 소속된 반별로 몇 명이 있는지 출력해주세요.
SELECT 소속반, COUNT(소속반) AS 반별인원수
FROM 수강생정보
GROUP BY 소속반;

-- 4. 성적표 테이블에서 학생별로 국어와 영어 성적의 평균을 출력해주세요.
SELECT 학생ID, ROUND(AVG(성적),1) AS 수학제외한평균
FROM 성적표
WHERE 과목 IN ('국어', '영어')
GROUP BY 학생ID;

-- 5. 직원 테이블에서 부서별로 연봉의 합계를 출력해주세요.
SELECT 부서ID, SUM(연봉) AS 부서별연봉합계
FROM 직원
GROUP BY 부서ID;

-- 6. 직원 테이블과 직원 연락처 테이블을 이용해서 직원별로 연락처정보가 몇개 있는지 출력해주세요.
--    직원 테이블을 기준으로 A0001 ~ A0011 의 모든 직원을 보여주되, 연락처가 없는 대상도 0건으로 출력
SELECT A.직원ID, COUNT(B.연락처) AS 연락처개수
FROM 직원 A LEFT OUTER JOIN 직원연락처 B
ON (A.직원ID = B.직원ID)
GROUP BY A.직원ID;
profile
개발자 공부중

0개의 댓글