다연이네

[days05] 집계함수 본문

Oracle

[days05] 집계함수

 다연  2020. 11. 4. 20:34
반응형

집계함수는 지가 알아서 null을 빼고 계산한다.

ORA-00937: not a single-group group function
이거 오류메시지 꼭 알고있자 (집계함수는 일반 컬럼과 같이 못쓴다는 의미)

1. count()

- select한 행의 개수 반환
- count (컬럼명)

ex) emp 테이블에 사원수를 파악

select count(*) --null을 포함한 모든 행의 수 
        ,count(empno)
        ,count(ename)
        ,count(comm) --4 (나머지8개는 null)
from emp;

2. avg()

select sum(sal)/count(sal), avg(sal)
from emp;

sum()/count() == avg()인 걸 보니 avg()의 내부구조가 sum()/count()와 같구나를 알 수 있다.

만일

select avg(comm) --550
from emp;

아래 코딩을 출력할때 comm이 null인 사람이 있으면 자기가 알아서 그 사람 빼고 계산한다.

 

문제) 가장 급여를 많이 받는 사원의 부서번호, 이름, 급여 정보 출력

select deptno, ename, sal
from emp
where sal = (select max(sal) from emp);

where문 안에 있는 쿼리는'서브쿼리'로, max는 바로 where에 못쓰기 때문에 본문처럼 사용해야 한다.

 

3. Top N - rownum

ex 1) 탑5가져오기 

select rownum, deptno,ename, sal
from (
    select *
    from emp
    order by sal desc
)
where rownum<=5; --탑5가져오기
--where rownum<=3 and rownum<=5; --사이 범위값은 안된다 (기억해두기)

ex 2) 총 사원수 출력 + 10번/20/30/40 각 부서의 사원수

select
count(decode(deptno, 10, 'O')) A  --10번 부서는 O, 나머지는 null 들어감
,count(decode(deptno, 20, 'O'))B  --나머지도 마찬가지
,count(decode(deptno, 30, 'O'))C
,count(decode(deptno, 40, 'O'))D
from emp;

ex 2-2) 인사테이블 남녀 찾기

select 
    count(decode(mod(substr(ssn,8,1),2),1, 'O'))
     ,count(decode(mod(substr(ssn,8,1),2),0, 'O'))
from insa;

ex 3) 각 부서별 사원수 구하기 - group by

select deptno  
        ,count(*)
        ,sum(sal)
        ,trunc(avg(sal))
from emp
group by deptno
order by deptno desc;

ex 3-2) 

select o.deptno, o.ename, o.sal --좋은 코딩은 절대 아님
        ,(select sum(sal) from emp)총급여액
        ,trunc((select avg(sal) from emp))전체평균급여액
        ,(select sum(sal)  from emp i where i.deptno = o.deptno)부서별급여합--emp (테이블명)에 alias i
        --얘를 상관서브쿼리 라고 한다. 밖의 쿼리와 관계가 있기 때문에
        ,trunc((select avg(sal)  from emp i where i.deptno = o.deptno))부서별평균급여
from emp o; --alias o

emp i와 emp o는 다르다.

안에있는 쿼리를 '상관서브쿼리'라고 한다. (밖의 쿼리와 관계가 있기 때문)

 

반응형

'Oracle' 카테고리의 다른 글

[days07] SQL - RANK, ROLL UP  (0) 2020.11.06
[days06] SQL function 이어서  (0) 2020.11.05
[days05] SQL function2  (0) 2020.11.04
[days04] SQL Operation, Function 예제  (0) 2020.11.03
[days04] SQL synonym  (0) 2020.11.03
Comments