지점 별, 판매 월별 매출이 나타난 table이 있다. 이 테이블의 지점 별 달마다의 누적 매출을 구하려면? oracle select 지점, 판매월, 매출, sum(매출) over (partition by 지점 order by 판매월 range between unbounded preceding and current row) 누적매출 from 월별 지점 매출 윈도우 함수가 지원되지 않는다면? select t1.지점, t1.판매월, min(t1.매출) 매출, sum(t2.매출) 누적매출 from 월별지점매출 t1, 월별지점매출 t2 where t2.지점 = t1.지점 and t2.판매월
인라인 뷰 활용 인라인 뷰란? 2021.03.28 - [Sql] - 서브쿼리 서브쿼리 1. 다중 행 서브쿼리 서브쿼리의 결과가 2건 이상 반환 될 수 있다면 반드시 다중 행 비교 연산자와 함께 사용 해야 한다. 그렇지 않으면 sql 문은 오류를 반환한다. 연산자 내 용 IN (서브쿼리) 서 pakker.tistory.com 대부분 조인은 1:m 관계인 테이블끼리의 조인이다. 조인 결과는 m쪽 집합과 같은 단위가 되는데, 이를 다시 1쪽 집합 단위로 그룹핑 해야 한다면 m쪽 집합을 먼저 1쪽 단위로 그룹핑하고 나서 조인하는 것이 유리하다. 이유는 join 횟수를 줄여주기 때문인데, 그런 처리를 위해 인라인 뷰를 사용 할 수 있다. 2개의 테이블이 필요하다고 해서 무조건 join을 바로 하려고 하지 말고, ..
- equi : A,B 테이블에 둘다 존재해서 등가로 join이 가능한 경우 - non equi : A,B 테이블에 둘다 존재해서 등가로 join이 가능한 경우 - from 절의 Join 형태 1. inner join 2. natural join 3. using 조건절 4. on 조건절 5. cross join 6. outer join 1. inner join : default join : join 조건에서 동일한 값이 있는 행만 반환 : cross join, outer join과 같이 사용 할 수 없다. 2. natural join : inner join의 하위 개념 : 두 테이블간의 join 조건에서 동일한 이름을 갖는 모든 칼럼들에 대해 equi join을 수행함 : join이 되는 테이블의 데이터..
scalar subquery 쿼리 내장된 또다른 쿼리 블록을 서브쿼리라고 하는데, 그 중에서 함수처럼 한 레코드 당 정확히 하나의 값 만을 리턴하는 서브 쿼리를 'scalar subquery' 라고 한다. scalar subquery는 주로 select-list에서 사용되지만 몇가지 예외사항을 뺀다면 칼럼이 올 수 있는 대부분 위치에서 사용 가능하다. 아래 쿼리는 위치가 'CHICAGO' 인 부서만 대상으로 급여 수준을 집계 사원(emp) 테이블 전체를 다 읽어야 하는 비효율이 있다. select d.deptno, d.dname, avg_sal, min_sal, max_sal from dept d right outer join (select deptno, avg(sal) avg_sal, min(sal) ..
* 인덱스 스캔 방식 1. index range scan : INDEX (RANGE SCAN) : 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔하는 방식이다. : B-tree 인덱스의 일반적, 정상적 형태의 엑세스 방식 2. index full scan : INDEX (FULL SCAN) : 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식 : 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택된다. ex. 연봉이 5000만원 이상인 사원 -> 극히 일부면 table full scan보다 index full scan 해도 됨 ex. 연봉이 1000만원 이상인 사원 -> 굉장히 많기 때문에 거의 모든 레코드에 닿으면 index ful..
1. 순위 관련 함수 : RANK, DENSE_RANK, ROW_NUMBER 2. 그룹내 집계 관련 함수 : SUM, MAX, MIN, AVG, COUNT 3. 행 순서 관련 함수 : FIRST_VALUE, LAST_VALUE, LAG, LEAD 4. 그룹내 비율 관련 함수 : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT 5. 선형분석을 포함한 통계 분석관련 함수 : ...(생략)......... 통계에 특화된 내용임 1. 순위 : 순위를 매겨줌. rank 순위를매겨줌. 차이점 : 1등이 두명이면 그다음은 3위로 표시 dense_rank 순위를매겨줌 차이점 : 1등이 두명이여도 그다음은 2위로 표시 ROW_NUMBER 순위를매겨줌 차이점 : 1등이 두명이여도 ro..
grouping sets를 통해 더욱 다양한 소계 집합을 만들 수 있다. 문장을 여러번 반복하지 않아도 원하는 결과를 쉽게 얻을 수 있게 되었다. 그룹함수 종류가 여러가지라 상황에 따라 잘 사용 할 것. 다음 포스팅을 참고 2021.03.29 - [Sql] - 그룹 함수-rollup, rollup orderby, grouping 그룹 함수-rollup, rollup orderby, grouping GROUP BY로 그룹핑한 로우들의 갯수나, 합계 등을 구해주는 기능이있다. oracle에서는 ROLLUP인데 mysql에서는WITH ROLLUP을 사용한다. 1. oracle select count(*) 'total empl', sum(SAL) 'total sal' from EMP,.. pakker.tisto..
rollup은 총 갯수, 총 합계 등만 가능했지만, cube는 결합 가능한 모든 값에 대하여 다차원 집계를 생성한다. 간단한 합계는 rollup을 사용하며, 다차원, 복합 합계는 cube를 사용한다. cube는 다차원, 복합합계를 지원하므로 자원을 더 쓸테니까 필요에 따라 사용하면 된다. rollup은 여기를 참고 2021.03.29 - [Sql] - 그룹 함수-rollup, rollup orderby, grouping 그룹 함수-rollup, rollup orderby, grouping GROUP BY로 그룹핑한 로우들의 갯수나, 합계 등을 구해주는 기능이있다. oracle에서는 ROLLUP인데 mysql에서는WITH ROLLUP을 사용한다. 1. oracle select count(*) 'total ..
GROUP BY로 그룹핑한 로우들의 갯수나, 합계 등을 구해주는 기능이있다. oracle에서는 ROLLUP인데 mysql에서는WITH ROLLUP을 사용한다. 1. oracle select count(*) 'total empl', sum(SAL) 'total sal' from EMP, DEPT where DEPT.DEPTNO = EMP.DEPTNO group by rollup (DNAME, JOB) -----> rollup 사용 2. mysql SELECT COUNT(IDX),IDX,WRITER,CONTENTS FROM TB_BOARD_COMMON_BJS GROUP BY WRITER WITH ROLLUP --> rollup 사용 가장 중요한 것은 SELECT 절에 집계함수를 사용 해야 한다. 그래야 결과..