1. 세로 연산의 원리
그룹핑 방법 예시그룹 함수를 쓰면 세로 연산이 된다. 세로 연산이 되면 결국 새로운 하나의 줄을 만들어낸다. (프로젝션이 아니다.) 새로운 줄에 다른 칼럼이 표현되고 싶으면, 값이 같으면 스쿼시 된다.
-- 세로 연산
-- 1. 그룹 함수
select avg(height)
from student;
select count(height)
from student;
select sum(height)
from student;
select min(height)
from student;
select max(height)
from student;
2. Group by 해서 연산하기
- 전체 행을 세로 연산 하려면 무엇을 쓸까? - sum, max, min, count, avg (그룹 함수)
- 특정 행들을 세로 연산 하려면 무엇을 쓸까? - where 과 그룹 함수
- 특정 그룹만 세로 연산 하려면 무엇을 쓸까? - where과 그룹 함수
- 그룹 별로 세로 연산 하려면 무엇을 쓸까? - group by와 그룹 함수
Group by, Union All
그룹핑하기
-- 3. 그룹핑 하기
select avg(sal), DEPTNO
from emp
where deptno = 10
union all
select avg(sal), DEPTNO -- 동일할 경우 스쿼시(찌그러뜨린다)해서 넣어준다. 20이 나옴
from emp
where deptno = 20
union all
select avg(sal), DEPTNO
from emp
where deptno = 30;




select avg(sal), DEPTNO
from emp
group by deptno;

select avg(sal), DEPTNO -- 동일할 경우 스쿼시(찌그러뜨린다)해서 넣어준다. 20이 나옴
from emp
where deptno = 20;

select avg(sal), job -- 동일하지 않기 때문에 스쿼시가 안 됨.
from emp
where deptno = 20;
3. 원하는 행만 세로 연산 하기
select floor (avg(pay))
from professor
where position = "정교수";

select avg(height)
from student;

select min(height), name -- 연산이 안됨
from student;
name을 끄집어내서 찌그러뜨릴 수 없기 때문에!
4. 학년 별 키의 평균이 보고 싶은 예제
-- 4. 그룹핑 원리 실습 / 문제 : 학년 별 키의 평균을 보고싶다.
select *
from student;
select avg(height), grade
from student
group by grade;

5. 학년 별 키의 평균을 보고 싶다. + 주민 번호 앞 두 자리 까지 포함해서 그룹 하기
-- 문제 : + 학년 별 키의 평균을 보고싶다. 주민 번호 앞 두자리까지
select avg(height), grade, substr(jumin, 1,2)
from student
group by grade, jumin;

select job, DEPTNO, avg(sal)
from emp
group by job, DEPTNO;

1) 10으로 그룹 된 거만 보기 싫을 때
having != ;
그룹으로 다 묶고 나서 where을 써야할 때 having으로 사용할 수 있음
select job, DEPTNO, avg(sal)
from emp
group by job, DEPTNO
having DEPTNO != 10;

2) having 쓴 예제
-- 평균 연봉이 2000 이상인 부서는?
select avg(sal), deptno
from emp
group by DEPTNO
having avg(sal) > 2000;

Share article