[Ch2] 빅쿼리에서 유용한 함수

jayce·2024년 7월 5일

EXCEPT / REPLACE


EXCEPT ('제외할 컬럼') : 필요없는 컬럼은 빼고 불러오자

REPLACE ('대체할 값' AS '컬럼명) : 불러올 때 간단하게 바꿔주자

-- EXCEPT
SELECT * EXCEPT(shipping_limit_date,freight_value)
FROM `olist.olist_order_items`
LIMIT 100
;

-- REPLACE
SELECT * REPLACE(price * 10000 AS price) -- price에 10000을 곱해서 가져오고 싶음
FROM `olist.olist_order_items`
LIMIT 100
;

CAST/ SAFE_CAST


  • 데이터 타입을 바꾸는 함수

CAST ('값' AS '데이터타입')
SAFE_CAST ('값' AS '데이터타입')

-- CAST / SAFE_CAST
SELECT
CAST('123' AS INT64), -- INT64
SAFE_CAST('123' AS INT64) -- INT64

SELECT
CAST('abc' AS INT64) -- error!
SAFE_CAST('abc' AS INT64) -- null

오류를 발생시키지 않는 SAFE 연산

  • 에러가 있을 경우 에러를 발생시키지 않고 null로 반환함
SAFE_ADD(X,Y)
SAFE_SUBTRACT(X,Y)
SAFE_MLTIPLY(X,Y)
SAFE_DIVIDE(X,Y) - 가장 자주 사용

특히 잘 쓰이는 SAFE_DIVIDE(X,Y) = X / Y

연산자 / 를 사용하여 나눈다면 error! -> SAFE_DIVIDE(X,Y) 이용하여 error 해결!
ifnull()과 조합하면 0으로 반환 가능

-- DIVIDE & SAFE_DIVIDE

SELECT
  -- DIVIDE(5 , 0), -- error
  SAFE_DIVIDE(5 , 0), -- null로 출력
  IFNULL(SAFE_DIVIDE(5 , 0), 0) -- null값 0으로 반환
;

ROW_NUMBER / RANK / DENSE_RANK


  • ROW_NUMBER() : 중복 없는 순위(고유, 공동순위 X)
  • RANK() : 동점일 때 중복 순위(공동순위 O) + 공동순위의 수만큼 밀려서 다음 순위 책정
  • DENSE_RANK() : 동점일 때 중복 순위(공동 등수) + 순위를 연속으로 매김
  • 예시)
  • ORDER BY는 무조건 쓰여야함
  • PATITION BY는 순위 구분하고 싶은 기준이 있을 때 사용
SELECT
  *,
  ROW_NUMBER() OVER (PARTITION BY class ORDER BY score DESC) AS col_rownum,
  RANK() OVER (PARTITION BY class ORDER BY score DESC) AS col_rank,
  DENSE_RANK() OVER ( ORDER BY score DESC) AS col_denserank
FROM tb
ORDER BY class
;
![]()

CASE


CASE
	WHEN [조건1] THEN [조건1 해당시 결과]
	WHEN [조건2] THEN [조건2 해당시 결과]
    ...
	ELSE [나머지 결과]
END

0개의 댓글