집합 함수의 기초
집합함수는 값을 계산해서 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 |