SQL

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

choisanghyun 2022. 1. 5. 19:22
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;