-- 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 ('값' 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_ADD(X,Y)
SAFE_SUBTRACT(X,Y)
SAFE_MLTIPLY(X,Y)
SAFE_DIVIDE(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으로 반환
;
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
WHEN [조건1] THEN [조건1 해당시 결과]
WHEN [조건2] THEN [조건2 해당시 결과]
...
ELSE [나머지 결과]
END