1.분석함수

 칼럼 vs 칼럼말고 행과 행간의 관계를 비교하기 힘듬. 

 분석함수 중첩사용 불가, 서브쿼리에서 사용가능

 

select 분석함수 over [(partition 절) /(order by절) /(windowing 절)] from 테이블;

 

-analytic_function: avg, count, lag, lead, max, min, rank, ratio_to_report, row_numbers, sum

                        arguments 0~3개까지 올 수 있다. count(*)만 허용, distinct는 함수가 허용해줄떄만

-partition by: 쿼리결과를 <exp_list> 별로 그룹핑한다. 생략시에는 하나의 그룹으로 리턴

-order by: order by < expr_list> [ASC | DESC | NULLS FIRST | NULLS LAST] : 표현식에는 별칭 안됨.

-windowing: row는 물리적단위(row위치), range는 논리적단위(row값)

                 rows[range] between start_point and end_point

 

-start_point: 그룹별 시작점. unbounded preceding, current row, value_expr, preceding value_expr following

-end_point: 그룹별 마지막점. 

 

 

 

over: 해당함수가 쿼리결과 집합에 따라서 적용되는 지시어. from, where, group by, having 이후에 계산.

        select, order by 구문뒤에 사용가능

       

 

 

 

 

 

 

 

 

q1) rank로 급여가 많은사원순으로 순위조회

partition- order by 순으로 적용됨.

1114 순으로 책정됨, 동일한 순위수만큼 건너뛴다 (RANK)

 

 

 

2.여러테이블 만들기

CREATE TABLE TEST03 (MYNAME, MYNO) AS

SELECT ENAME, EMPNO FROM EMP;        #별칭

 

CREATE TABLE TEST04 AS

SELECT ENAME, EMPNO, JOB FROM EMP

WHERE ENAME= 'SCOTT';        #조건주기

 

3.CREATE TABLE 시 제약조건 소멸

4. DENSE_RANK (건너뛰는 RANK가 없다. 1111 22 3)

 

 

5.CUME_DIST(): CUMULATIVE DISTRIBUTION FUNCTION : 

구하고자하는 값보다 작거나 같은값을 가진 ROW수를 그룹내 전체 ROW수로나눈것

 SELECT ENAME, SAL, CUME_DIST() OVER (ORDER BY SAL)

 FROM TEST_EMP 

 WHERE DEPTNO=20;

 

6.NTILE()

103개의 ROW, NTILE(5) => 근사치로 배분, 남는값부터 하나씩

1(21) 2(21) 3(21) 4(20) 5(20)

EX)봉급을 4등급으로 분류

SELECT ENAME, SAL, NTILE(4) OVER (ORDER BY SAL) FROM EMP;

 

7.ROW_NUMBER() : ROW_NUM과 무관

EX) 조회시 순번을 매기기(ROW_NUMBER) , 급여순, BUT 급여 같으면 입사일 빠른사람 순번

SELECT EMPNO, ENAME, SAL, HIREDATE,

ROW_NUMBER() OVER (ORDER BY SAL DESC, HIREDATE ASC) AS "순번"

FROM TEST_EMP;

 

 

8.WINDOW 함수

 

 

 

 

 

'SQL-오라클' 카테고리의 다른 글

SQL-cmd 5  (0) 2021.05.26
SQL-cmd 4  (0) 2021.05.26
SQL- cmd3- 비주얼툴은 언제 쓰는가...  (0) 2021.05.25
sql 예제  (0) 2021.05.24
sql 자료  (0) 2021.05.24

+ Recent posts