DATABASE(oracleDB 11g)/SQL

[SQL]집합 함수의 기초

SEUNGSAMI 2019. 1. 29. 14:09

집합 함수의 기초


집합함수는 값을 계산해서 1개의 값으로 나타내어 준다.


종류는 기본적으로 SUM(), AVG(), MAX(), MIN(), COUNT(), rank()등이 있으며

각각 합, 평균, 최대, 최소, 갯수, 순위를 나타낸다


다음은 잘못된 예시이다. (ORA-00937: not a single-group group function)

1
2
3
select last_name, salary, sum(salary)
from employees;
 
cs

위의 예시를 볼경우 sum()의 값은 1개인데 나머지 값들이 1개이상이므로 에러가 발생한다.


즉 이러한 다중함수는 다중함수끼리 혹은 1개의 row로만 또는 분석함수를 사용해서 나타내주어야 한다.


다음의 옳은 예시를 보자

1
2
3
4
5
select sum(salary)
from employees;
 
select sum(salary), avg(salary), min(salary), max(salary)
from employees;
cs


추가적인 잘못된 예시를 보자(ORA-00937: not a single-group group function)

1
2
3
select last_name, salary
from employees
where salary >= avg(salary);
cs

이 경우 avg(salary)값은 저장되는 값이 아니기 때문에 총 salary의 갯수와 비교가 불가능하다. 즉 avg(salary)는 단 한번만 실행이 되기때문에 이러한 현상이 발생하는 것이다.

단 SQL을 읽어들이는 순서를 변경한다면 가능할 수도 있다(subquery).


@@COUNT함수는 null을 세지 않는다. 그러므로 전체 col의 수를 세려면 다음과 같이 쓴다.

1
2
select count(*)
from employees;
cs


아래의 예시는 rank()함수의 사용법이다.

1
2
3
4
5
select rank(3000) within group(order by salary asc)
from employees;
 
select rank(3000) within group(order by salary desc)
from employees;
cs


SQL을 배운지 얼마 되지 않아 잘못된 내용이 있을 수 있습니다. 틀린 내용이있다면, 댓글로 달아주세요.

'DATABASE(oracleDB 11g) > SQL' 카테고리의 다른 글

[SQL] 분석 함수  (0) 2019.01.29
[SQL]GROUP BY의 기초  (0) 2019.01.29
[SQL]decode와 case함수  (0) 2019.01.29
[SQL]날짜관련함수 연습문제  (0) 2019.01.29
[SQL]width_bucket함수  (0) 2019.01.28