본문 바로가기

개발/데이타베이스39

LISTAGG ... WITHIN ... ROWNUM 적용하고 싶을 때 .. listagg ... within 문법상으로만은 결합하고 싶은 칼럼의 rownum 지정이 불가능하다. 그래서, subquery 로 활용이 필요하다. 예제) select c.pid , listagg(keyword, ',') within group(order by weight desc) as keywords from PROJECT_LIST c, ( select pid, keyword, weight, ROW_NUMBER() OVER (PARTITION BY rcn ORDER BY WEIGHT desc) as rnum from KEYWORD_WEIGHT ) d where c.pid = d.pid and rnum < 10 group by c.pid 위와 같이 subquery 를 만들어서 rnum 조건을 주는 방법.. 2017. 2. 9.
[ORACLE] ROLLUP, CUBE, GROUPING ROLLUP operatorROLLUP구문은 GROUP BY 절과 같이 사용 되며, GROUP BY절에 의해서 그룹 지어진 집합 결과에 대해서 좀 더 상세한 정보를 반환하는 기능을 수행 한다.SELECT절에 ROLLUP을 사용함으로써 보통의 SELECT된 데이터와 그 데이터의 총계를 구할 수 있다. 간단 예제-- 먼저 GROUP BY를 사용해서 직업별로 급여 합계를 구하는 예제이다. SQL> SELECT job, SUM(sal) FROM emp GROUP BY job; JOB SUM(SAL) ---------- ---------- ANALYST 600 CLERK 3200 MANAGER 33925 PRESIDENT 5000 SALESMAN 4000 -- ROLLUP을 사용해서 직업별로 급여 합계와 총계를 .. 2017. 2. 6.
[ORACLE] RANK OVER() / ROW_NUMBER() OVER() -- 분석 함수 -- RANK OVER() -- ROW_NUMBER() OVER() ** 중요 제일 많은 씀 ** -- 순위를 구함. -- RANK() OVER()는 동일 순위인 경우 1,1,3, 형식으로 출력하지만 -- ROW_NUMBER() OVER()는 동일 순위인 경우 1,2,3, 형식으로 출력 -- DENSE_RANK() OVER()는 동일 순위인 경우 1,1,2 형식으로 출력 -- ROW_NUMBER() OVER()는 매우매우매우 중요한 함수이므로 반드시 알아 둘것 !!!!!!!!!!!!!!!!!!! -- ***** 나중에 게시판 작성 할 때 사용하는 쿼리 형식이므로 반드 암기 해야함. ***** -- ROW_NUMBER()를 이용한 쿼리가 아래 ROWNUM을 사용한 쿼리보다 우수 SELECT.. 2017. 2. 6.
[ORACLE] LISTAGG ... WITHIN ... - GROUPING COLUMN 이 아닌 다른 컬럼 값을 한행에 나열 - LISTAGG([,]) WITHIN GROUP (ORDER BY ) [OVER (PARTION BY)] : OVER() 함수 사용시 GROUP BY 절 생략 가능 : SELECT ID, LISTAGG(NAME, ',') WITHIN GROUP (ORDER BY REG_DATE) OVER (PARTITION BY ID) AS NAMES FROM TARGET_TBL; - ORDER BY 절 생략 불가. 굳이 넣고 싶다면, (ORDER BY NULL) 같은 방법으로 ... - 성능도 좋음 ... 참고 ) http://halloman.tistory.com/entry/LISTAGG-WITHIN-GROUP-%ED%95%A8%EC%88%98-%.. 2017. 2. 6.