SQL 과정

2.1 SQL 그룹함수

memory0136 2019. 2. 1. 15:42

1.그룹 함수

 가. 하나 이상의 행을 그룹으로 묶어서 연산하여 하나의 결과를 반환하는 함수

 나. 그룹함수는 해당 컬럼값이 NULL이면 이를 제외하고 계산한다.


* 단일 함수 ROUND SAL 100의 자리를 반올림


* 그룹함수 SUM(SAL 컬럼의 값을 모두 합한 값을 출력한다.)


* 그룹함수 AVG(SAL 컬럼의 값들을 평균으로 연산하여 출력한다.)


* 그룹함수 MAX(SAL 컬럼 값들 중 가장 높은 값을 출력한다.)

* 그룹 함수MIN(가장 낮은거 출력)



* 컬럼의 로우의 개수를 세는 함수 COUNT 사용(NULL은 세지 않는다.)


* 모든 컬럼과 COMM컬럼에서 NULL을 제외한 로우의 수를 출력


* 문자열로 된 컬럼의 값들의 개수도 센다.(중복되는 값들도 따로따로 센다.)


* 중복되지 않게(DISTINCT) 하여 컬럼의 수를 센다.



2. GROUP BY 절

 가. 특정 컬럼을 기준으로 테이블에 존재하는 행들을 그룹별로 구분하기 위해 사용

 나. 형식

    1) 그룹 함수를 사용할 경우 어떤 컬럼값을 기준으로 그룹함수를 적용할지 지정해야 한다.

    2) 이 절 뒤의 컬럼명에는 컬럼의 별칭은 사용할수 없고 반드시 컬럼 명이 와야한다.


* GROUP BY절을 사용(30그룹, 20그룹, 10그룹으로 나누어진다.)


* 그룹(30, 20, 10) 별 SAL 평균



* ENAME은 GROUP BY절에 묶여지지 않았기 때문에 사용 불가하다.


* GROUP BY절에는 그룹함수(SUM, AVG 등)를 사용할수 있다.(그룹화 된 컬럼에 단일 함수를 사용하는 것도 가능하다.)


* ORDER BY절 사용으로 내림차순(DESC)을 이용하여 2개의 인자를 추가할수 있다. 


* DEPTNO을 그룹화 시키고 각 그룹의 SAL 최대값과 최소값을 출력한다.


* DEPTNO를 그룹화 시키고, 그룹화된 전부(*)의 로우의 개수와 그룹화된 DEPTNO들의 COMM의 로우의의 개수를 센다.

3. HAVING 절

 가. GROUP BY절에 의해 생성된 결과 값 중 원하는 조건에 부합하는 자료만 보고자 할때 사용

 나. WHERE vs HAVING


* having 으로 AVG(SAL) 조건이 2000보다 같거나 큰값을 출력해낸다.


* 그룹별로 최대값과 최소값을 구하고, 여기에 최대값이 2900이상인 그룹만을 출력


* 위 조건에서 AND로 하여 최소값이 1000 이상인것도 조건을 추가 하였다.


* 단순 그룹은 그룹함수를 사용할수 없다.


* SAL값이 가장 높은 ENAME 만을 출력