(SQL 문법) SQL 함수 (그룹 함수)

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

댓글