728x90
그룹함수
그룹함수(MAX, MIN, AVG, SUM, COUNT)
그룹함수
-- 총 5개 그룹함수
-- 최대값: max() , 최소값: min(), 평균: avg(), 총합: sum(), 갯수: count()
select max(sal), min(sal), avg(sal), sum(sal), count(sal)
FROM EMP;
SELECT trunc(avg(sal),0) --10번부서
FROM EMP
where deptno = 10; --2916
SELECT trunc(avg(sal),0) --20번부서
FROM EMP
WHERE DEPTNO = 20; --2175
------------ ****** 그룹함수5개는 Group by와 무관하게 그냥 쓸수 있다.
SELECT trunc(avg(sal),0) --30번부서
FROM EMP
where deptno = 30; --1566
GROUP BY
GROUP BY는 그룹함수를 사용하기 위함
------------ ****** Group by 컬럼1,컬럼2 --> select 컬럼1,컬럼2
---그룹 바이 했으면 셀렉트로 지정을 해줘야한다
------ORA-00979: not a GROUP BY expression
------00979. 00000 - "not a GROUP BY expression"
---- ename이 있으면 에러가 난다 ( Group by deptno만 사용하고 있다.)
select ename, deptno, trunc(avg(sal),0)
FROM EMP
GROUP BY ename, deptno
order by deptno asc;
--- ORA-00937: not a single-group group function
-- 00937. 00000 - "not a single-group group function"
SELECT sal, min(ENAME)
from emp;
select deptno,job, avg(sal) --- trunc(avg(sal),0)
FROM EMP
GROUP BY deptno,job
order by deptno asc;
-- mgr 있으면 y 없으면 n : as mgr_yn
select * from emp;
SELECT MGR ,
CASE NVL(MGR,0) WHEN 0 THEN 'n'
ELSE 'y'
END MGR_YN
from emp;
SELECT 명령어 순서 (SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY 순)
-- 명령어 순서 중요 --
-- ************** WHERE 뒤에는 AVG 그룹함수 사용 불가
SELECT DEPTNO, AVG(SAL)
FROM EMP
WHERE
GROUP BY DEPTNO
HAVING AVG(SAL)>=2000 #HAVING으로 그룹함수 조건 사용가능
ORDER BY
;
활용예시
-- 각 부서별 평균 급여 출력 , 단 평균 급여는 2000 이상
GROUP BY DEPTNO SELECT AVG(SAL) AVG(SAL)>=2000
SELECT DEPTNO,AVG(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING AVG(SAL)>=2000;
'SQL' 카테고리의 다른 글
(SQL 문법) 집합 연산 (0) | 2022.01.05 |
---|---|
(SQL 문법) 서브 쿼리 (단일행, 다중행) (0) | 2022.01.05 |
(SQL 문법) JOIN (0) | 2022.01.05 |
(SQL 문법) SQL 함수 (단일행 함수) (0) | 2022.01.05 |
(SQL 문법) SELECT문 기본 (0) | 2022.01.05 |
댓글