# ★ 쿼리 작성 가이드 ★

# 쿼리 체크 리스트

쿼리 작성할 때 바로 쿼리를 작성하지 말고, 잠깐 아래 내용을 생각해보고 작성을 시작해보시면 어떨까요?

    1. 현재 보고 싶은 지표는 무엇인가?, 이 쿼리를 작성하는 목표는 무엇인가?
    1. 해당 지표는 어떻게 계산해야 할까? 데이터의 기간은 어떻게 될까?
    1. 해당 지표를 계산하기 위해 어떤 테이블을 확인해야 할까? JOIN시 활용할 Key는 무엇인가?
    1. 하나의 테이블에서 원하는 정보를 모두 추출할 수 있을까? 혹은 여러 테이블을 사용해야 할까?
    1. 데이터를 파악할 때 주의해야 하는 내용은?(status가 특정 값인 것만 추출한다거나)
  • 위 내용을 주석으로 설정한 후, 쿼리 작성하는 습관 가지기

TIP

주석 템플릿

# 쿼리를 작성하는 목표, 확인할 지표 : 
# 쿼리 계산 방법
# 데이터의 기간
# 사용할 테이블
# Join KEY
# 데이터 특징

SELECT

FROM


# 회사에서 쿼리 작성하는 흐름

  1. 쿼리 체크 리스트를 작성한다

  2. 보고 싶은 지표를 구체화한다(ex : 유저가 얼마나 A 제품을 구입하는가?)

    • 2-1. 사내에 이미 해당 지표를 구하는 쿼리가 있는지 찾아본다 => 있으면 바로 쿼리 실행하고 쿼리 분석하기
  3. 보고 싶은 지표가 있는 데이터가 있는 Table 찾기(여러 Table일 수 있음)

    • 3-1. 하나의 Table에서 모든 데이터가 나올 것 같은 경우 => 바로 쿼리를 짠다
    • 3-2. 여러 Table에서 데이터를 연결해야 할 것 같은 경우 => 어떻게 연결할지 고민한다
  4. 구한 결과값이 정말 맞는지 확인한다(데이터 정합성 체크) => 원본 데이터를 하나씩 비교해보는 방법도 있고 다양한 방법이 존재

  5. 쿼리를 더 좋게 만들 방법을 고민한다(쿼리 속도, 가독성 등)



# 쿼리 실행 순서

쿼리문은 실행시 내부적으로 다음과 같은 순서로 실행됩니다. 실행 순서를 이해하고 있으면 왜 오류가 나는지 이해할 수 있습니다

FROM
WHERE
GROUP BY, Aggregation
HAVING
WINDOW
QUALIFY
DISTINCT
ORDER BY
LIMIT
  • FROM 절의 테이블에서 데이터를 확인하고
  • WHERE 조건에서 필터링할 조건 탐색하고
  • GROUP BY가 있다면 집계(Aggregation)하며
  • 집계 후 조건이 필요할 경우 HAVING
  • 윈도우 함수 실행
  • QUALIFY 윈도우 함수 조건
  • DISTINCT 고유값 확인
  • ORDER BY 정렬
  • LIMIT으로 행 개수 제한