본문 바로가기
Project

Team2) [DB] group by, having을 이용한 데이터 가공하기

by code_learner 2022. 1. 25.

[문제]

학생 테이블생성

1. 각 동아리의 총인원 출력

2. 각동아리의 평균점수 출력

3. 각 동아리중에서 평균이 40이상인 동아리만 출력

 

 

 

[테이블 생성하기]

create table student(
	sid int primary key, -- 학생번호
	sname varchar(20) not null, --학생이름
	club varchar(30), --소속 클럽
	score int default 0 --학생점수
);

[데이터 추가]

insert into student values((select nvl(max(sid),0)+1 from student), '홍길동','미술부', 10);
insert into student values((select nvl(max(sid),0)+1 from student), '임꺽정','연극부', 20);
insert into student values((select nvl(max(sid),0)+1 from student), '아리','방송부', 30);
insert into student values((select nvl(max(sid),0)+1 from student), '티모','미술부', 60);
insert into student values((select nvl(max(sid),0)+1 from student), '가로쉬','미술부', 30);
insert into student values((select nvl(max(sid),0)+1 from student), '안두인','방송부', 90);
insert into student values((select nvl(max(sid),0)+1 from student), '티란데','연극부', 20);
insert into student values((select nvl(max(sid),0)+1 from student), '밀하우스','연극부', 70);

 

 

 

[1. 각 동아리의 총인원 출력]

 

- GROUP BY: 특정 칼럼을 그룹화 한다.

- count(칼럼)함수: 칼럼의 개수를 구한다.

- A as B : A를 B로 재정의한다.

select club, count(sname) as cnt from student group by club;

 

 

[2. 각 동아리의 평균점수 출력]

-avg(칼럼) : 칼럼의 평균을 구한다.

-ROUND("값", "자리수"): 값에 자리수까지 반올림하고 나머지는 삭제한다.

 

select club, count(sname) as cnt, round(avg(score), 1) as avg from student group by club;

 

 

[3. 각 동아리중에서 평균이 40이상인 동아리만 출력]

 

- HAVING: 특정 칼럼을 그룹화한 결과에 조건을 건다.

      *WHERE은 그룹화하기 전의 조건!

select club, count(sname) as cnt, round(avg(score), 1) as avg from student group by club having avg(score)>40;

 

 

 

참고블로그

https://extbrain.tistory.com/56

 

[MySQL] 그룹화하여 데이터 조회 (GROUP BY)

▶MySQL 그룹화하여 데이터 조회 (GROUP BY) ▶설명 하나, 예를 들어보겠습니다. MySQL에서 유형별로 갯수를 가져오고 싶은데, 단순히 COUNT 함수로 데이터를 조회하면 전체 갯수만을 가져옵니다. 이렇

extbrain.tistory.com

 

댓글