제수기 > SQL > DML/DQL > 고급쿼리 사용하기

Eunbi Jo·2024년 12월 27일
0

제수기

목록 보기
16/90
제수기 - 제발 수업내용을 기억하자

WINDOW FUNCTION

  • 그룹핑하면서 일반 컬럼을 같이 쓸 수 있다.
  • ANSI/ISO SQL 표준에서 WINDOW FUNCTION 용어를 사용함
<구분>
# 순위관련 함수(Rank Function)
- RANK, DENSE_RANK, ROW_NUMBER

# 집계관련 함수(Aggregate Function)
- SUM, MAX, MIN, AVG, COUNT
- SQL Server 경우 Over절 내 order by 지원 못함

# 순서관련 함수
- FIRST_VALUE, LAST_VALUE, LAG, LEAD
- ORACLE 만 지원

# 비율관련 함수
- CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
- PERCENT_RANK 함수는 ANSI/ISO SQL 표준과 Oracle DBMS에서 지원
- NTILE 함수는 ANSI/ISO SQL 표준에는 없지만, Oracle, SQL Server에서 지원
- RATIO_TO_REPORT 함수는 Oracle에서만 지원(현업에서 유용).

# 통계분석 함수
- CORR, COVAR_POP, COVAR_SAMP, STDDEV, STDDEV_POP, STDDEV_SAMP, VARIANCE, VAR_POP, VAR_SAMP, REGR_(LINEAR REGRESSION), REGR_SLOPE, REGR_INTERCEPT, REGR_COUNT, REGR_R2, REGR_AVGX, REGR_AVGY, REGR_SXX, REGR_SYY, REGR_SXY
<문법>
WINDOW_FUNCTION (ARGUMENTS) OVER ([PARTITION BY절] [ORDER BY절] [WINDOWING절])

순위함수

  • rank : 중복된 순위가 있으면 중복된 수만큼 건너뛰고 다음 순위를 부여한다.
  • dense rank : 중복이 있으면 순위를 건너뛰지 않고 다음 순위를 부여한다.
  • row_number : 중복된 값이 있어도, 중복된 순위를 부여하지 않는다.
  • percent_rank : 순위를 0~1 사이의 비율로 표현한다.

집계함수

-- sum, max, min, avg, count 그룹함수의 윈도우 함수버전
-- 일반컬럼과 그룹함수의 결과를 동시에 출력가능하다.
-- over절을 통해 gruop by를 적용할 수 있다.
  • 집계와 관련 없는 함수를 썼다는 오류가 난다.
  • 아래와 같이 하면 나온다. group by와 다르다. 일반 컬럼과 그룹함수의 결과를 동시에 출력 가능하다.
  • sum(a) over() : a 다 더함
  • avg(a) over() : a 다 더해서 평균냄
  • count(a) over() : a count

그룹핑 처리

  • partition by로 그룹핑
  • partition bycategory_code 그룹핑. category_code로 그룹핑된 menu_price를 각 함수에 따라 계산.
  • sumorder by를 넣어주면 누적합 계산도 됨. (cumulative_sum)

partition by 그룹핑 예시

group_concat

  • 문자열로 합침

💥계층형 쿼리

- hierarchical query
- 트리구조(fractal)의 데이터를 부모행/자식행을 연결해 조회하는 쿼리
- mysql 8.0 이상부터 지원
- 주로 트리구조에 해당하는 조직도, 메뉴, 답변형 게시판 등에서 
  쓰인다. 댓글 밑에 또 댓글 다는 기능도.
  • 카테고리를 계층형으로 조회하게 해보자.
-- level : 각 계층별 숫자 (루트가 0, 이후에는 자식노드마다 1씩 증가)
-- path : 루트부터 현재 노드(행)까지의 경로를 문자열로 만든다.
	(이후에 이걸 order by에서 사용한다.)

💥 흐름 다시 살펴보기

  • 부모행 -> 자식행 이동 가능하게 할 수 있다.

  • 사내 조직도 예시


💥임의의 행 만들기


  • 예시
  • 뭔 흐름인지 하나도 모르겠다.

💥group by와 차이점

0개의 댓글