테이블에서 데이터 정보를 꺼낼 때,
명령어의 처리순서
-------------------------------------------------- select 컬럼명1, 컬럼명2 -> 5 번 from 테이블명 (또는 뷰명) -> 1 번 where 조건절 -> 2 번 // where 조건절 : 조건에 만족하는 테이블의 행(row)를 // 메모리(RAM)에 로딩해주는 것 group by 절 -> 3 번 having 그룹함수조건절 -> 4 번 order by 절 -> 6 번 --------------------------------------------------
-> 1차그룹지어진 사람들 가지고 2차그룹짓기
SELECT department_id as 부서번호
, gender as 성별
, count(*) as 인원수
FROM
(
select department_id
, case when substr(jubun,7,1) in('1','3')
then '남' else '여' end as gender
from employees
) V
GROUP BY department_id, gender
order by 1;
rollup(컬럼명), cube(컬럼명)
항상 group by 와 사용된다.
grouping 유무 판별
-> grouping(컬럼명)
group 되어있으면 1, group 이 아니면 0
group 이 아닌 것 전체를 뜻한다.
SELECT decode (grouping(department_id), 0
, nvl(to_char(department_id),'부서없음'), '전체' )
as 부서번호
-- 또는
/*
case grouping(department_id)
when 0 then nvl(to_char(department_id),'부서없음')
else '전체' end as 부서번호
*/
, decode (grouping(gender),0,gender,'전체') as 성별
, count(*) as 인원수
, to_char(round(
COUNT(*)/( select count(*) from employees )*100, 1)
,'990.0') as "퍼센티지(%)"
FROM
(
select department_id
, case when substr(jubun,7,1) in('1','3')
then '남' else '여' end as gender
from employees
) V
GROUP BY rollup(department_id, gender)
-- rollup 시, 10~110 부서, 부서전체, 남녀, 부서별 남녀전체
-- cube 시 , 10~110 부서, 부서전체, 남녀, 부서별 남녀전체
-- , 총 남녀전체
ORDER BY department_id,1,2;
-- 부서번호(숫자)정렬
-- 1은 grouping(department_id)의 값을 정렬 0과 1 (null 값 정렬)
-- 2는 gender 정렬
- rollup(a,b,c) 는
grouping sets((a,b,c), (a,b), (a,c), (b,c), (a) () ) 와 같다.- cube(a,b,c) 는
grouping sets((a,b,c), (a,b), (a,c), (b,c), (a), (b), (c), () 와 같다.
listagg(보여줄컬럼명,'구분자') within group(order by 보여줄 컬럼명의 정렬기준 asc/desc)
select department_id as 부서번호
, listagg(first_name || ' ' || last_name, ',')
-- 구분자 ','
within group(
order by nvl(salary + (salary * commission_pct), salary)
desc) as "급여가 많은 순서대로 사원명 출력"
from employees
group by department_id;
case when then else end, decode
: https://velog.io/@jjoung-2j/%EB%8B%A8%EC%9D%BC%ED%96%89-%ED%95%A8%EC%88%98-%EA%B8%B0%ED%83%80-%ED%95%A8%EC%88%98
-> local_hr에서작업한것