-- Execpt
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
select
cast('123' as int64), --데이터타입 변경
safe_cast('123' as int64) --위와 동일
--Safe_cast
select
cast('abc' as int64) --에러발생
safe_cast('abc' as int64) --null 값으로 대체
safe를 사용하면 오류가 나는 값을 모두 null 값으로 출력
/
를 사용하여 나눌 때 0으로 나누면 생기는 오류를 해결할 수 있기 때문-- DIVIDE & SAFE_DIVIDE
SELECT
DIVIDE(5 , 0), --오류 발생
SAFE_DIVIDE(5 , 0), -- 오류값 null값으로 출력
IFNULL(SAFE_DIVIDE(5 , 0), 0)
;
점수 | ROW_NUMBER | RANK | DENSE_RANK |
---|---|---|---|
100 | 1 | 1 | 1 |
95 | 2 | 2 | 2 |
95 | 3 | 2 | 2 |
80 | 4 | 4 | 3 |
SELECT
name,
class,
score,
-- ROW_NUMBER() OVER (ORDER BY score DESC) as row_num,
-- RANK() OVER (ORDER BY score DESC) as row_rank,
-- DENSE_RANK() OVER (ORDER BY score DESC) as row_dense_rank,
ROW_NUMBER() OVER (PARTITION BY class ORDER BY score DESC) as row_num,
RANK() OVER (PARTITION BY class ORDER BY score DESC) as row_rank,
DENSE_RANK() OVER (PARTITION BY class ORDER BY score DESC) as row_dense_rank,
FROM tb
-- ORDER BY row_num
ORDER BY class
;