본문 바로가기

전체 글

(144)
SQL 데이터 분석함수 - Row_number 출력결과 넘버링 ROW_NUMBER(출력되는결과를 원하는 컬럼별 순서대로넘버링) row_number() over (order by sal desc) as 별칭 —> ____ 에 order by 문법을 꼭 부여해야한다. →넘버링을 하는이유는, 어떤 출력 되는 결과의 몇번째 행을 출력 시킬때 유용하다. 예제 : row_number 데이터 분석함수는 출력되는 select 문의 결과의 행에 numbering(번호부여) 하는 함수이다. 넘버링의 장점은 : 출력되는 결과의 두번째, 세번째 등등 원하는 행을 출력,검색 할 수 있다. select empno, ename, sal, row_number() over (order by empno asc)번호 from emp where deptno= 20; 위의 식의결과에서 두번째행만 출력 ..
SQL 데이터 분석함수 - 집계결과 출력 Grouping sets Grouping sets cube 와 rollup 을 사용하기 편리하게 도와주는 것 grouping sets( (그룹핑할 컬럼1), (그룹핑할컬럼2) , () ) select deptno, job, sum(sal) from emp group by grouping sets ((deptno), (job),()) order by deptno, job asc; → rollup 과 cube 보다 출력되는 결과를 더 쉽고 정확하게 예측 할 수 있습니다. → () 의 의미는 전체 집계이다. → 그룹핑할 컬럼에 ( ) 괄호로 둘러주어야한다. 문제 246 : 아래의 sql 결과를 rollup 이용하지말고 grouping sets 로 수행하시오 select deptno, sum(sal) from emp group by g..
SQL 데이터 분석함수 - 집계결과 출력 Cube 집계결과가 맨 아래 : rollup 집계결과가 맨 위에 : cube CUBE = 결과값이 맨위출력 예제 : select nvl(job, '전체토탈'), sum(sal) from emp group by cube(job); 문제 : 위의 결과에서 NULL 값에 전체 토탈이라고 출력되게 하시오 select nvl(to_char(deptno), '전체토탈')as DEPTNO, sum(sal) from emp group by cube(deptno); 문제 245 : 직업, 직업별 인원수를 출력하는데 아래와 같이 맨 위에 전체토탈이 출력되게하시오 select nvl(job, '전체토탈')as JOB, count(*) from emp group by cube(job); → 이미 JOB 이 문자이므로 NVL 함수 쓸때..
SQL 데이터 분석함수 - 집계결과 출력 Rollup ROLLUP (집계 결과 출력하기) group by 절에 rollup 을 이용하게 되면 전체 집계값이 아래에 출력이 됩니다. 만약 sum 을 쓰면 sum 값, avg 면 전체 avg 값등 수식에 따라 다르다. 예제 : 직업, 직업별 토탈월급을 출력하는데 맨 아래에 전체토탈월급이 출력 되도록 하시오 select job, sum(sal) from emp group by rollup (job); → 맨 아래에 전체 토탈월급(집계값) 이 출력된다. 문제 226 : 부서번호, 부서번호별 평균월급을 출력, 맨아래에 전체평균월급도 출력 select deptno, avg(sal) from emp group by rollup(deptno); 문제 227 : 나이, 나이별 인원수를 출력하는데 맨 밑에 전체 인원수 출력 s..
SQL 데이터 분석함수 - 원형 비율출력 Ratio_to_report RATIO_TO_REPORT (데이터분석함수로 비율출력) 예제 : select empno, ename, sal, ratio_to_report(sal) over () as 비율, sal/sum(sal) over () as "비교비율" from emp where deptno = 20; → 일부러 비교비율 식을 넣어 ratio_to_report 식이 잘 나왔나 확인해봄. 전체월급에서 월급을 나누었음. 문제 : 위의 결과를 다시 출력 하는데, 비율이 높은 사원부터 출력 select empno, ename, sal, ratio_to_report(sal) over () as 비율, sal/ sum(sal) over () as "비교비율" from emp where deptno = 20 order by 비율 desc..
SQL 데이터 분석함수 - 누적데이터 Sum () over () SUM OVER (누적데이터) sum(sal) over () from emp → over 다음( 괄호)에 아무것도 넣지않으면 누적되지않은 총값만 나오게 된다. 누적 되는식으로 데이터가 나타나려면 order by 절에 select ename, sal, sum(sal) over( order bY sal asc rows between unbounded preceding and current row) 누적치 from emp where job in ('ANALYST', 'MANAGER') unbounded preceding : 제일 첫번째 행 unbounded following : 맨 마지막 행 current row : 현재 행 문제 219 : 부서번호, 이름, 월급, 월급의 누적치가 출력 되게하고 월급의 누적치..
SQL 데이터 분석함수 - 전행과, 다음행 출력 Lag, Lead(컬럼, 1 or 2..)over (partition by ~ order by ~ desc/asc ) LAG, LEAD ( 전행과, 다음행 출력하기) → 은행에서 통장 잔고 확일할때 LAG ,LEAD 의 원리로 SQL 쿼리를 입력한다. LAG : 전행 → LAG( 컬럼명, 1 OR 2 OR 3 ...) LEAD : 다음행 → LEAD (컬럼명 , 1 OR 2 OR 3...) → 1 은 바로 전행 2는 전전행 3은 전전전행 .... 예제 46 : 이름 , 입사일, 바로전에 입사한 사원과의간격일 출력 select ename, hiredate, hiredate - lag(hiredate,1) over (order by hiredate asc) as days from emp; 문제 : 이름, 생일 , 생일과의 간격일을 출력 select ename, birth, birth - lag(birth , 1) over ..
SQL 데이터 분석함수 - 데이터 가로출력 Listagg (컬럼명,',') within group(order by~ desc/asc ) LISTAGG(가로로 출력하기) → group by 절을 반드시 써야한다. 예제 : 부서번호를 출력, 해당부서번호별로 속한 사원들의 이름을 가로로 출력 select deptno, listagg(ename, ',') within group (order by ename asc) from emp group by deptno; 분석함수 ( ) 에 괄호에 무언가 채워넣어져 있다면 within group 을 사용해야한다. 이름과 이름사이는 ',' , 콤마로 구분하겠다. 어떻게 가로로 출력 하는가?? → within group ( order by 컬럼명 asc or desc)를 쓰지 않고 listagg 만 써도 데이터 결과는 나오지만, 출력되는 결과를 정렬해서 가로로 나오게 하고싶다면 within group ( or..