희망에 부푼 이 뛰는 가슴으로 못할 것 없다. 세상을 밝게 사람들에게 행복을!!
max - 최대값을 출력하는 함수
다음과 같이 해보자.
emp 테이블에서 월급이 제일 큰것을 출력하려면.
select max(sal) from emp;
MAX(SAL) --------- 5000
자, 다음은 직업이 SALESMAN 인 사원이 받는 월급 중 가장 많은 월급과 함께 직업을 같이 출력하려면..select job, max(sal) from emp where job='SALESMAN';
-'단일 그룹의 그룹 함수가 아닙니다' 라는 메시지를 볼수 있다.
여기서 문제가 뭐냐하면, job이 SALESMAN 인 row 는 여러개니까 그것이 다 출력되려고 하고,max 값은 최대값으로 하나만 나오려고 하니까 둘이 다투다가 문제가 생기는 것이다.따라서, 여기서 필요한 건 뭐?!
group by 절이 필요하게 된다.
일단 써보면,select job, max(sal) from emp where job='SALESMAN' group by job; JOB MAX(SAL)----------------------------SALESMAN 1600
위 쿼리에서 where 절을 빼면 각 직업별로 최대 월급이 출력된다.
JOB MAX(SAL)----------------------------CLERK 1300SALESMAN 1600PRESIDENT 5000MANAGER 2975ANALYST 3000
이처럼 grouping 을 하는 것이 group by 절의 역할이다.
그러면 위 결과에서 최대월급이 3000보다 큰 것만 출력하려면.. select job, max(sal) from emp where max(sal) >= 3000 group by job;
위 쿼리를 날렸더니~ '그룹 함수는 허가되지 않습니다' 라는 메시지를 볼수 있다. ㅡ,.ㅡ;여기서 알아볼 것은 위 쿼리에서의 실행 순서이다.쿼리 실행 순서를 살펴보면...
코딩순서(위->아래), 실행순서(번호순)
select 5 from 1 where 2 group by 3 having 4 order by 6
from -> where -> group by -> having -> select -> order by 이렇게 실행이된다.
이 실행순서를 보고 원하는 결과값을 얻으려면 where 절의 조건을 having 절에다 쓰면된다.having 절은 뭐냐하면 group by 한 결과의 조건을 줄때 사용하는 절이다.그래서, 위의 쿼리를 고쳐보면..
select job, max(sal) from emp -- where max(sal) >= 3000 group by job having max(sal) >= 3000;
JOB MAX(SAL)----------------------------PRESIDENT 5000ANALYST 3000
-- 는 주석을 뜻한다. 주석은 쿼리문의 실행에 영향을 미치지 않는다. -- 는 한줄짜리 주석일때 사용하고/* */ 은 여러 줄을 주석으로 처리할때 사용한다.참고할것!!
최대값을 알아봤으니 이제 최소값을 알아볼건데..
min - 최소값을 출력해주는 함수
이것 역시 쓰임은 max 와 동일하다. 위 쿼리에서 max 부분을 min 으로 하면 최대 결과 값이 아닌최소값을 얻을 수 있다.
여기서 max 와 min 은 날짜에도 적용할 수있는데과거날짜와 현재날짜를 비교하면 현재날짜가 더 크다.그래서 다음과 같이 emp 테이블에서 가장 먼저 입사한 사원의 입사일을 출력하려면..
select min(hiredate) from emp;
MIN(HIREDATE)--------------1980-12-17
이렇게 구할 수가 있다.
count - 카운트 해주는 함수
일단 예를 보면,각 부서별로 인원수를 알고 싶다면..
select deptno, count(*) from emp group by deptno;
DEPTNO COUNT(*)--------------------30 620 510 3
위처럼 사용할 수 있다.뭐.. 더 궁금한게 있으면.. 무엇이든 물어보세요~!! (어디서 이런 강한 자신감이 나오는지 원.. ㅡ,.ㅡ;)
avg - 평균값을 출력해주는 함수
각 직업별로 월급의 평균값을 알고 싶다면...
select job, avg(sal) from emp group by job;
JOB AVG(SAL)---------------------------------------CLERK 1037.5SALESMAN 1400PRESIDENT 5000MANAGER 2758.33333333333ANALYST 3000
여기까지 했으면 함수는 거의 다 본거 같고.. 다음은...
SQL 함수3
max - 최대값을 출력하는 함수
다음과 같이 해보자.
emp 테이블에서 월급이 제일 큰것을 출력하려면.
select max(sal)
from emp;
MAX(SAL)
---------
5000
자, 다음은 직업이 SALESMAN 인 사원이 받는 월급 중 가장 많은 월급과 함께 직업을 같이 출력하려면..
select job, max(sal)
from emp
where job='SALESMAN';
-'단일 그룹의 그룹 함수가 아닙니다' 라는 메시지를 볼수 있다.
여기서 문제가 뭐냐하면, job이 SALESMAN 인 row 는 여러개니까 그것이 다 출력되려고 하고,
max 값은 최대값으로 하나만 나오려고 하니까 둘이 다투다가 문제가 생기는 것이다.
따라서, 여기서 필요한 건 뭐?!
group by 절이 필요하게 된다.
일단 써보면,
select job, max(sal)
from emp
where job='SALESMAN'
group by job;
JOB MAX(SAL)
----------------------------
SALESMAN 1600
위 쿼리에서 where 절을 빼면 각 직업별로 최대 월급이 출력된다.
JOB MAX(SAL)
----------------------------
CLERK 1300
SALESMAN 1600
PRESIDENT 5000
MANAGER 2975
ANALYST 3000
이처럼 grouping 을 하는 것이 group by 절의 역할이다.
그러면 위 결과에서 최대월급이 3000보다 큰 것만 출력하려면..
select job, max(sal)
from emp
where max(sal) >= 3000
group by job;
위 쿼리를 날렸더니~ '그룹 함수는 허가되지 않습니다' 라는 메시지를 볼수 있다. ㅡ,.ㅡ;
여기서 알아볼 것은 위 쿼리에서의 실행 순서이다.
쿼리 실행 순서를 살펴보면...
코딩순서(위->아래), 실행순서(번호순)
select 5
from 1
where 2
group by 3
having 4
order by 6
from -> where -> group by -> having -> select -> order by
이렇게 실행이된다.
이 실행순서를 보고 원하는 결과값을 얻으려면 where 절의 조건을 having 절에다 쓰면된다.
having 절은 뭐냐하면 group by 한 결과의 조건을 줄때 사용하는 절이다.
그래서, 위의 쿼리를 고쳐보면..
select job, max(sal)
from emp
-- where max(sal) >= 3000
group by job
having max(sal) >= 3000;
JOB MAX(SAL)
----------------------------
PRESIDENT 5000
ANALYST 3000
-- 는 주석을 뜻한다.
주석은 쿼리문의 실행에 영향을 미치지 않는다.
-- 는 한줄짜리 주석일때 사용하고
/* */ 은 여러 줄을 주석으로 처리할때 사용한다.
참고할것!!
최대값을 알아봤으니 이제 최소값을 알아볼건데..
min - 최소값을 출력해주는 함수
이것 역시 쓰임은 max 와 동일하다. 위 쿼리에서 max 부분을 min 으로 하면 최대 결과 값이 아닌
최소값을 얻을 수 있다.
여기서 max 와 min 은 날짜에도 적용할 수있는데
과거날짜와 현재날짜를 비교하면 현재날짜가 더 크다.
그래서 다음과 같이 emp 테이블에서 가장 먼저 입사한 사원의 입사일을 출력하려면..
select min(hiredate) from emp;
MIN(HIREDATE)
--------------
1980-12-17
이렇게 구할 수가 있다.
count - 카운트 해주는 함수
일단 예를 보면,
각 부서별로 인원수를 알고 싶다면..
select deptno, count(*)
from emp
group by deptno;
DEPTNO COUNT(*)
--------------------
30 6
20 5
10 3
위처럼 사용할 수 있다.
뭐.. 더 궁금한게 있으면.. 무엇이든 물어보세요~!!
(어디서 이런 강한 자신감이 나오는지 원.. ㅡ,.ㅡ;)
avg - 평균값을 출력해주는 함수
각 직업별로 월급의 평균값을 알고 싶다면...
select job, avg(sal)
from emp
group by job;
JOB AVG(SAL)
---------------------------------------
CLERK 1037.5
SALESMAN 1400
PRESIDENT 5000
MANAGER 2758.33333333333
ANALYST 3000
여기까지 했으면 함수는 거의 다 본거 같고..
다음은...
'SQL > 공부' 카테고리의 다른 글