[DataBase] 3장_복수행 함수

존진·2023년 10월 19일

📌 GROUP 함수

⭐ 집계 함수에서는 NULL 을 제외함

✅ COUNT

  • 개수를 세는 함수
  • COUNT(컬럼명)

⚠️ 집계함수 사용 시 속성 사용 불가

SELECT deptno, COUNT(deptno)
FROM emp;

[🔎] 만약 deptno 컬럼 안에 NULL 값이 들어있다면?
: COUNT할 때 NULL 값을 제외한다. / 중복 고려 하지 않음(중복되어도 서로 다른 튜플로 인정함)


✅ SUM

  • 수를 더하는 함수
  • SUM(컬럼명)
SELECT deptno, SUM(sal)
FROM emp;

✅ AVG

  • 수의 평균을 구하는 함수
  • AVG(컬럼명)
SELECT AVG(sal)
FROM emp;

✅ MAX / MIN

  • 최대 / 최소 값을 구하는 함수
  • MAX(컬럼명) / MIN(컬럼명)
  • hiredate: 입사일
SELECT MAX(hiredate), MIN(hiredate)
FROM emp;

   |----------------------------------------------------------------------------------->
(기준)        (MIN_입사일)             (MAX_입사일)                       (현재)

⚠️ 날짜가 입력될 경우 현재와 가깝다면 기준 시점보다 "큼"


✅ STDDEV / VARIANCE

  • 표준편차를 구하는 함수 / 분산을 구하는 함수

⭐ GROUP BY절 사용시 주의 사항

❗ SELECT 절에 사용된 그룹함수 이외의 컬럼이나 표현식은 반드시 GROUP BY 절에 사용되어야 함

SELECT deptno, job, SUM(sal)
FROM emp
GROUP BY deptno;
(X) 오류발생

[🔎] GROUP BY 절에 사용된 컬럼이라도 SELECT 절에는 사용되지 않아도 됨


❗ 반드시 컬럼명을 사용해야하며 Alias는 사용하면 안됨

SELECT deptno no, job, SUM(sal)
FROM emp
GROUP BY no;
(X) 오류발생

[🔎] SELECT보다 GROUP BY가 먼저 실행됨


❗ HAVING절을 사용해 GROUPING한 조건으로 검색하기

SELECT deptno no, job, SUM(sal)
FROM emp
WHERE AVG(sal) > 2000;
(X) 오류발생

⭐ WHERE절에는 그룹 함수를 쓸 수 없음 ➡️ HAVING을 써야됨

SELECT deptno no, job, SUM(sal)
FROM emp
WHERE deptno
HAVING AVG(sal) > 2000;

⭐ RANK

  • 특정 데이터의 순위 확인
  • 컬럼명이 아닌 상수값을 넣어야함 ➡️ RANK(ename) [X] / RANK('SMITH') [O]
  • 동점자 처리 방법을 가지고 있음
  • RANK(조건값) WITHIN GROUP(ORDER BY 컬럼명[desc|asc])
    ⚠️ RANK 뒤의 조건 값과 GRDER BY 뒤에 나오는 데이터는 같은 컬럼(같은 타입)이어야 함

PARTITION BY(컬럼명) : 그룹을 만든 후 등수를 출력함, 컬럼 여러개 쓸 수 있음

DENSE_RANK vs RANK

  • 동점자 처리 방법의 차이가 있음

RANK | DENSE_RANK
   1             1
   2             2
   2             2
   4             3
   5             4


✅ ROS_NUMBER

  • 동점자 처리를 하지 않는 것이 특징

⭐ SUM() OVER

  • 누적 합계

0개의 댓글