빅쿼리는 열기반 저장 방식 사용 >> 사용할 컬럼만 가져오는 것이 효율적
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 x 10000 값이 바로 출력됨
FROM `olist.olist_order_items`
LIMIT 100
;
CAST('값' AS '데이터 타입')
SAFE_CAST('값' AS '데이터 타입')
CAST('123' AS INT64) -- INT64
SAFE_CAST('123' AS INT64) -- INT64
CAST('abc' AS INT64) -- error
SAFE_CAST('abc' AS INT64) -- null
오류를 발생시키지 않는 SAFE 연산
→ 에러가 있을 경우 에러를 발생시키지 않고 null 반환
SAFE_ADD(X, Y) = X + Y
SAFE_SUBTRACT(X, Y) = X - Y
SAFE_MULTIPLY(X, Y) = X * Y
SAFE_DIVIDE(X, Y) = X / Y → 가장 자주 사용
특히 잘 쓰이는 SAFE_DIVIDE(X, Y)
→ 연산자 /로 나누면 error > SAFE_DIVIDE 이용하여 error 해결 (IFNULL과 조합하면 0으로 반환 가능)
SELECT
-- 5/0 -- error
SAFE_DIVIDE(10, 0), -- null 반환
IFNULL(SAFE_DIVIDE(10, 0), 0) -- null값을 0으로 반환
;
ROW_NUMBER() : 중복없는 순위(고유)RANK() : 동점일 때 중복 순위(공동 등수) + 공동 순위자가 있을 때 그 수만큼 건너뛰고 다음 등수를 매김DENSE_RANK() : 동점일 때 중복 순위(공동 등수) + 순위를 연속으로 매김
ORDER BY [조건]은 필수PARTITION 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 (PARTITION BY class ORDER BY score DESC) AS col_denserank
FROM tb
ORDER BY class

CASE
WHEN [조건1] THEN [조건1 해당 시 결과]
WHEN [조건2] THEN [조건2 해당 시 결과]
...
ELSE [모두 해당하지 않을 때 결과]
END