반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- StringReader
- 리눅스세팅
- ThreadGroup()
- 메모리스트림
- 스레드그룸
- include액션태그
- isinterrupted()
- include지시자
- MemoryStream
- String char[] 형변환
- first-child
- 표현 언어
- StringWriter
- ObjectInputStream
- 아이디중복
- 상관 서브 쿼리
- Linux셋팅
- first-of-child
- ID중복
- 리눅스셋팅
- char[] String 형변환
- Linux세팅
- 상관서브쿼리
- Daemon()
- include 지시자
- InputDialog
- interrupted()
- interrupt()
- 동기화
- sleep()메소드
Archives
- Today
- Total
다연이네
[days07] SQL - RANK, ROLL UP 본문
반응형
여기 두 코딩은 같은 의미이다.
select deptno, count(*)
from emp
group by deptno
order by deptno;
select distinct deptno, count(*) over(partition by deptno)
from emp
order by deptno;
1. 여러 테이블 조인
emp, dept, salgrade 테이블에서 deptno, dname, ename, sal, grade 컬럼 출력
--1
select e.deptno, dname, ename, sal, grade
from emp e , dept d, salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal;
--2
select e.deptno, dname, ename, sal, grade
from emp e join dept d on e.deptno = d.deptno --이퀄조인
join salgrade s on e.sal between s.losal and s.hisal; --논이퀄조인
2. emp 테이블의 각 부서별 최고급여액 받는 사원 정보 출력
1) 상관서브쿼리 사용
2) group by 사용
--1)
select deptno, ename, sal
from emp o
where o.sal = (select max(sal) from emp i where i.deptno = o.deptno )
order by deptno;
--2)
select deptno, max(sal) --대신 group by 때문에 누군지는 확인 불가
from emp
group by deptno
order by deptno;
RANK() OVER
- 등수를 매기는 함수로, 그룹 내에서 위치를 계산하여 반환한다.
- 해당 값에 대한 우선순위를 결정하며(중복 순위 계산함) 반환되는 데이터타입은 NUMBER이다.
select *
from(
select deptno, ename, sal
,rank() over(ORDER by sal desc) 급여순서
,rank() over(partition by deptno order by sal desc) "부서별 급여 순서"
from emp
order by deptno
)
where 급여순서<=5;
rank()over() , dense_rank()over() , row_number()over() 차이점
select ename, sal
,rank() over(order by sal desc) r --9,9,11
,dense_rank() over(order by sal desc) d --9,9,10
,row_number() over(order by sal desc) rn --9,10,11
from emp;
집계함수를 일반함수와 같이 쓰는 법
select deptno, ename, sal
,sum(sal) over(order by deptno ) 누적
,sum(sal) over(partition by deptno order by deptno ) 부서별
from emp;
ROLL UP()
SELECT 컬럼명, 그룹함수(컬럼명)
FROM 테이블명
WHERE 조건
GROUP BY [ROLLUP ¦ CUBE]그룹핑하고자하는 컬럼명,...
HAVING 그룹조건
ORDER BY 컬럼명 또는 위치번호
select deptno, count(*)
from emp
group by deptno
union select null, count(*) from emp;
--같은 의미
select deptno, count(*)
from emp
group by rollup(deptno);
select deptno, job, count(*) --부서별>직급별 사원수
from emp
group by deptno, job
union
select deptno, null as job, count(*) --부서별 사원수
from emp
group by deptno
union all
select null, null as job , count(*) --전체 사원수
from emp
order by deptno; --오더바이는 늘 합쳐진 마지막에
--같은 의미
select deptno, job, count(*)
from emp
group by rollup(deptno, job);
그럼 CUBE()는 뭐야? - 모든 그룹 조합별로 다 출력
select deptno, job, count(*)
from emp
group by cube(deptno, job); --모든 그룹 조합별로 다 출력
반응형
'Oracle' 카테고리의 다른 글
[days07] level 의사컬럼 (0) | 2020.11.06 |
---|---|
[days07] 오라클 data type(자료형) (0) | 2020.11.06 |
[days06] SQL function 이어서 (0) | 2020.11.05 |
[days05] 집계함수 (0) | 2020.11.04 |
[days05] SQL function2 (0) | 2020.11.04 |
Comments