✨ [ORACLE]_복습_23.03.01

‍전희주·2023년 3월 1일
0

10장 복습

🔽 ROLL UP

  • ROLL UP 내 사용된 인자 개수 + 1만큼 그룹화 실행
  • "()"의 의미는 GROUP이 없는 즉, 전체에 대한 결과를 출력한다는 뜻 입니다. EX.(SUM 함수 사용하면 전체 SUM 구한다는 뜻)
  • ROLLUP 이전에 일반 컬럼과 GROUP BY 한다면, 일반 컬럼은 끝까지 남습니다.

🔽 GROUP BY ROLLUP(A, B, C) 예시

🔽 GROUP BY A, ROLLUP((B, C)) 예시

🔽 GROUPING, GROUPING_ID 그리고 숫자 GROUP 추가에 대한 내용

  • GROUPING 함수
    : GROUPING 함수는 ROLLUP이랑 같이 사용합니다.
    해당 칼럼이 ROLLUP 되었을 때 그룹에서 빠져있다면 1을 반환합니다.
    즉, GROUP BY ROLLUP 결과로 NULL이 나왔을 때 1을 반환합나다.

  • OVER () : SELECT 명령 수행 결과 전체를 분석 대상으로 합니다.

  • Window Function 범위 지정 (ROW, RANGE 차이 분석)

윈도우함수(args) OVER (
[ PARTITION BY column ] ORDER BY column [ASC | DESC] ]
[ [ROWS|RANGE] BETWEEN UNBOUNDED PRECEDING[CURRENT ROW]
AND UNBOUNDED FOLLOWING[CURRENT ROW] ]
)

  • 윈도우 함수로 사용 되는 파라미터(args)는 함수마다 다르며 0~N개가 지정될 수 있습니다.

  • OVER 괄호 안의 내용은 전부 생략 가능한 내용입니다.

  • 하나씩 살펴보면 PARTIONTION BY 는 입력한 컬럼별로 프레임을 나누고, 나눠진 프레임별로 윈도우 함수를 적용합니다.

  • GROUP BY 절을 이용해 컬럼별로 묶는 것과 같다고 생각하시면 됩니다.

  • 어떤 함수를 적용하기전 정렬이 필요하다면 ORDER BY 절을 이용하면 됩니다.

    ROWS : 물리적인 단위로 행 집합을 지정
    RANGE : 논리적인 단위로 의해 행 집합을 지정
    BETWEEN ~ AND : 윈도우의 시작과 끝 위치를 지정
    UNBOUNDED PRECEDING : 윈도우 시작 위치가 첫 번째 로우임을 의미
    UNBOUNDED FOLLOWING : 윈도우 마지막 위치가 마지막 로우임을 의미
    [ROW수] PRECEDING : 윈도우 시작 위치가 ROW수만큼 이전이 시작 로우임을 의미
    [ROW수] FOLLOWING : 윈도우 마지막 위치가 ROW수만큼 다음이 마지막 로우임을 의미
    CURRENT ROW : 현재 로우까지를 의미

  • ROWS와 RANGE의 차이는 ROWS는 조회된 ROW 하나하나를 대상으로 연산하며,
    RANGE는 ORDER BY 를 통해 정렬된 컬럼에 같은 값이 존재하는 ROW가 여러 개일 경우, 동일한 컬럼값을 가지는 모든 ROW를 묶어서 연산을 합니다.

문제 풀이 오답노트


문제8 "직업별 평균급여중" 가장 최소인 직업을
출력하시오. (값이 다르게 나오는지 확인 후 암기)

JOB AVG(SAL)


CLERK 1037.5

"직업별 평균급여중" -> 그룹을 나타내는 결과 집합의 행에 적용

//HAVING 절은 WHERE 절과 비슷하지만 그룹 전체 즉, 그룹을 나타내는 결과 집합의 행에만 적용된다는 점에서 차이가 있습니다.
반면, WHERE 절은 개별 행에 적용됩니다.
쿼리에는 WHERE 절과 HAVING 절이 모두 포함될 수 있습니다.//

SELECT JOB, AVG(SAL)
FROM EMP
WHERE AVG(SAL) = (SELECT MIN(AVG(SAL)) FROM EMP GROUP BY JOB)
GROUP BY JOB;

select job, avg(sal)
from emp
group by job
having avg(sal) = (select min(avg(sal))
from emp
group by job);

profile
heejoojeon@daou.co.kr

0개의 댓글