본문 바로가기
MySQL

Analysis function

by 달자루 2020. 5. 12.

MySQL 분석함수

분석함수는 순위를 매길 때 쓸 수 있다. 써보는 게 참.. 중요한 사고 포인트.

순위함수 : rank, dense_rank, row_number, ntitle

집계함수(그룹함수) : sum, min, max, avg, count (sum과 avg는 숫자에만 적용된다.)

기타함수 : lead, lag, first_value, last_value, ratio_to_report(mariadb 지원안됨)

SELECT EMPNO, ENAME, DEPTNO, SAL, RANK() OVER(ORDER BY SAL DESC) 급여순위
FROM EMP; # 중복된 RANK가 있으면 다름 순위는 중복된 개수만큼 떨어짐.

SELECT EMPNO, ENAME, DEPTNO, SAL, DENSE_RANK() OVER(ORDER BY SAL DESC) 급여순위
FROM EMP;  #중복된 RANK가 있어도 순위가 더 떨어지지 않는다.


SELECT EMPNO, ENAME, DEPTNO, SAL, NTILE(5) OVER(ORDER BY SAL DESC) FROM EMP;

SELECT EMPNO, ENAME, HIREDATE, ROW_NUMBER() OVER() FROM EMP;
SELECT EMPNO, ENAME, HIREDATE, ROW_NUMBER() OVER() NUMBERING FROM EMP;
SELECT EMPNO, ENAME, HIREDATE, ROW_NUMBER() OVER() NUMBERING FROM EMP LIMIT 2;

SELECT EMPNO, ENAME, HIREDATE, ROW_NUMBER() OVER(ORDER BY HIREDATE ASC) NUMBERING FROM EMP;

SELECT EMPNO, ENAME, SAL, HIREDATE, DEPTNO, SUM(SAL) SUMSAL FROM EMP;
SELECT EMPNO, ENAME, SAL, HIREDATE, DEPTNO, SUM(SAL) OVER() SUMSAL FROM EMP;
SELECT EMPNO, ENAME, SAL, HIREDATE, DEPTNO, SUM(SAL) OVER() 총급여, SUM(SAL) OVER(PARTITION BY DEPTNO) 부서별총급여
FROM EMP
ORDER BY 부서별총급여;

SELECT EMPNO, ENAME, SAL, AVG(SAL) 
OVER(PARTITION BY JOB) 업무별평균급여, 
MAX(SAL) OVER(PARTITION BY JOB) 업무별최대급여
FROM EMP;

'MySQL' 카테고리의 다른 글

AutoCommit  (0) 2020.05.12