데이터베이스

DATABASE STEP 17 - Group By

2023. 3. 18. 14:03
728x90

★ Group By

  • 레코드를 대상으로 그룹을 나누는 역할
  • 특정 컬럼을 대상으로 같은 값을 가지는 레코드들끼리 그룹을 묶는 역할
  • 그룹을 왜 나누는지? > 각각의 나눠진 그룹을 대상 > 집계 함수를 적용하기 위해서
  • 실행 순서 및 구조
select 컬럼리스트  -- 4. 컬럼을 선택
from 테이블         -- 1. 테이블로부터
where 조건          -- 2. 원하는 레코드를
group by 기준      -- 3. 그룹을 나눠서
order by 정렬조건 -- 5. 정렬한다

 

■ 사용 ex)

  • tblIsan 테이블의 부서별 평균 급여
select * from tblInsa;

select avg(basicpay) from tblInsa; -- 155만원, 60명

select distinct buseo from tblInsa; -- 7개

select round(avg(basicpay)) from tblInsa where buseo = '총무부'; --171
select round(avg(basicpay)) from tblInsa where buseo = '개발부'; --138
select round(avg(basicpay)) from tblInsa where buseo = '영업부'; --160
select round(avg(basicpay)) from tblInsa where buseo = '기획부'; --185
select round(avg(basicpay)) from tblInsa where buseo = '인사부'; --153
select round(avg(basicpay)) from tblInsa where buseo = '자재부'; --141
select round(avg(basicpay)) from tblInsa where buseo = '홍보부'; --145
select 
    round(avg(basicpay)),
    buseo
from tblInsa
    group by buseo;
  • 남자 몇명? 여자 몇명? > 남녀별 각각 몇명인지?
select
    count(*),
    gender
from tblComedian
    group by gender;
  • 대륙별 국가수?
select 
    count(*),
    continent
from tblCountry
    group by continent;
  • 부서별 부서 ex)
select 
    buseo,
    count(*) as "부서별 인원수",
    sum(basicpay) as "부서별 급여 합",
    round(avg(basicpay)) as "부서별 평균 급여",
    max(ibsadate) as "부서별 막내의 입사일",
    min(ibsadate) as "부서별 고참의 입사일"
from tblInsa
    group by buseo;
  • 남녀별 ex)
select 
    gender,
    round(avg(height)) as "남녀별 평균 키",
    round(avg(weight), 1) as "남녀별 평균 몸무계",
    max(height) as "키가 가장 큰사람",
    min(height) as "키가 가장 작은사람"
from tblComedian
    group by gender;
  • 직업별 인원수?
select 
    job,
    count(*)
from tblAddressBook
    group by job
        --order by count(*) desc;
        order by job asc;
  • 다중 그룹 (1차 그룹[부서] > 2차 그룹[직위])
select 
    buseo as "부서명",
    jikwi as "직위명",
    count(*) as "인원수"
from tblInsa
    group by buseo, jikwi
        order by buseo, jikwi;
  • 성별 인원수
select  
    count(*),
    substr(ssn, 8, 1) as "성별"
from tblInsa
    group by substr(ssn, 8, 1);
  • 지역별 인원수
select 
    substr(address, 1, instr(address, ' ') -1), -- -- 공백을 기준으로 공백만큼 짤라옴
    count(*)
from tblAddressBook
    group by substr(address, 1, instr(address, ' ') -1);
  • 이메일 사이트별 인원수
select
    substr(email, instr(email, '@')+1) as "사이트",
    count(*) as "회원 수"
from tblAddressBook
    group by  substr(email, instr(email, '@')+1)
        order by count(*) desc;
  • 급여별 그룹 > 인원수? ( 100만원 이하, 100~200만원, 200만원 이상)
select
    basicpay,
    floor(basicpay / 1000000)
from tblInsa;
     
select
   (floor(basicpay / 1000000) +1) * 100 || '만원 이하' as "급여대",
    count(*) as "인원수"
from tblInsa
    group by floor(basicpay/1000000)
        order by floor(basicpay / 1000000) asc;
  • 한일? 안한일? 각각 몇개?
select 
    completedate,
    count(*)
from tblTodo
    group by completedate;

select
    count(*) as "개수",
     case
        when completedate is null then '안한일'
        when completedate is not null then '한일'
    end as "완료/미완료"
from tblTodo
    group by  case
            when completedate is null then '안한일'
            when completedate is not null then '한일'
                end;

 

■ Group By 요구사항

-- tblZoo. 종류(family)별 평균 다리의 갯수를 가져오시오.
select *
from tblzoo;
select 
    family as "종류",
    round(avg(leg),1)
from tblzoo
    group by Family;
    
-- tblZoo. 사이즈와 종류별로 그룹을 나누고 각 그룹의 갯수를 가져오시오.
select 
    count(*) as "개수",
    sizeof as "크기", family as "어종"
from tblzoo
    group by sizeof, family
        order By family asc, sizeof desc;
        
-- tblAddressBook. 이메일이 스네이크 명명법으로 만들어진 사람들 중에서 여자이며, 20대이며, 키가 150~160cm 사이며, 고향이 서울 또는 인천인 사람들만 가져오시오.
select *
from tblAddressBook
    where instr(email,'_') <>0 and 
        Gender = 'f' and 
        height between 150 and 160 
        and hometown in ('서울', '인천');
728x90
저작자표시 비영리 변경금지 (새창열림)

'데이터베이스' 카테고리의 다른 글

DATABASE STEP 19 - SubQuery  (0) 2023.03.21
DATABASE STEP 18 - Having 절  (2) 2023.03.20
DATABASE STEP 16 - Update&Delete  (0) 2023.03.18
DATABASE STEP 15 - Insert  (0) 2023.03.18
DATABASE STEP 14 - Sequence  (0) 2023.03.18
'데이터베이스' 카테고리의 다른 글
  • DATABASE STEP 19 - SubQuery
  • DATABASE STEP 18 - Having 절
  • DATABASE STEP 16 - Update&Delete
  • DATABASE STEP 15 - Insert
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • 웹페이지
  • 프론트엔드
  • IT자격증
  • 정보처리기사필기
  • DB
  • 개발자
  • React
  • IT자격증공부
  • 정보보안전문가
  • 앱개발자
  • 정보처리기사
  • 백준
  • 자바
  • IT개발자
  • 데이터베이스
  • 웹개발
  • ajax
  • 웹개발자
  • html
  • css
  • JavaScript
  • it
  • jsp
  • DBA
  • 개발블로그
  • 백엔드
  • java
  • 코딩테스트
  • 알고리즘
  • jquery

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
DATABASE STEP 17 - Group By
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.