반응형
* 회사의 데이터베이스 서버의 종류 2가지
1. OLTP (OnLine Transaction Processing) 서버 : ex) 현재 활발하게 주문하는 데이터
2. DW (Data Warehouse) 서버 : ex) 주문 이력 데이터
1의 데이터가 차후 2로 저장 (장기저장된 많은 데이터를 보유한 곳 ex) 건보공단)
2를 바탕으로 데이터 분석
2를 돕기 위해 Oracle 데이터 분석 함수를 제공 ex) 순위 , 집계
문제 205. 이름, 월급, 월급에 대한 순위를 출력하시오.
SELECT ename, sal, RANK() OVER (ORDER BY sal DESC) AS 순위
FROM emp;
구조 : RANK() OVER ()
* 동일한 순위가 여럿이면, 다음 순위는 연속하는 번호를 출력하지 않음.
동일 값은 동일한 숫자로 출력하고, 차순위는 해당 숫자만큼 건너뛰고 출력.
SELECT ename, sal, DENSE_RANK() OVER (ORDER BY sal DESC) AS 순위
FROM emp;
* DENSE_RANK를 사용하면 연속되게 출력.
문제 208. 사원 테이블에서 월급이 1250은 순위가 몇 위인가?
SELECT RANK(1250) WITHIN GROUP (ORDER BY sal DESC) AS 순위
FROM emp;
구조 : RANK(특정 값) WITHIN GROUP ()
* 특정 값이 차지하는 순위를 알고 싶을 경우에는 이렇게 작성한다.
문제 209. 직업, 이름, 월급, 순위를 출력하는데 순위가 직업별로 각각 월급이 높은 순서대로 순위를 부여하시오.
SELECT job, ename, sal,
RANK() OVER(PARTITION BY job
ORDER BY sal DESC) AS 순위
FROM emp;
직업별로 나눈 후에 직업별로 순위 구할 때 : 주의! group by 아님.
문제 215. 문제 203번의 결과를 다시 출력하는데, 상호명, 상호명별 건수, 순위를 출력하시오.
(순위가 상호명 별 건수가 높은 순서대로)
SELECT 상호명,건수, RANK() OVER(ORDER BY 건수 DESC) AS 순위
FROM(SELECT CASE
WHEN 상호명 LIKE '%스타벅스%' THEN '스타벅스'
WHEN 상호명 LIKE '%이디야커피%' THEN '이디야커피'
WHEN 상호명 LIKE '%메가엠지씨커피%' THEN '메가엠지씨커피'
WHEN 상호명 LIKE '%투썸플레이스%' THEN '투썸플레이스'
ELSE 상호명 END AS 상호명, COUNT(*) AS 건수
FROM MARKET_2022
WHERE 상권업종중분류명 LIKE '커피점/카페' AND 상호명 != '카페'
GROUP BY CASE
WHEN 상호명 LIKE '%스타벅스%' THEN '스타벅스'
WHEN 상호명 LIKE '%이디야커피%' THEN '이디야커피'
WHEN 상호명 LIKE '%메가엠지씨커피%' THEN '메가엠지씨커피'
WHEN 상호명 LIKE '%투썸플레이스%' THEN '투썸플레이스'
ELSE 상호명 END
);
'Oracle DBA > SQL' 카테고리의 다른 글
20230627 (1) SQL 043 : 데이터 분석 함수로 등급 출력하기(NTILE) (0) | 2023.06.28 |
---|---|
20230627 (5) SQL 042 : 데이터 분석 함수로 순위 출력하기 2(DENSE_RANK) (0) | 2023.06.27 |
20230627 (3) SQL 040 건수 출력하기(COUNT) (0) | 2023.06.27 |
20230627 (2) SQL 039 : 토탈값 출력하기(SUM) (0) | 2023.06.27 |
20230627 (1) SQL 038 : 평균값 출력하기 (AVG) (0) | 2023.06.27 |