おはようございます、BigQueryのSQL演習シリーズ第一弾の記事です。
BigQuery歴3年超の私が、SQL書いててよく使うなあって書き方を少しずつ紹介していきたいと思っています。
お題 + 答えSQL + 解説の構成です。
今回のお題はこちら!
100万件の商品に1~100万の連番が割り振られているとします。これをランダムソートしよう
今回のルール
- BigQueryのSQL1回の実行で算出すること
- 参照するテーブルはナシ
- 乱数の発生は
RAND()
を使う
ページスクロールすると答えのSQLと解説が見れます。
BigQueryのSQLを学ぶにはこちらの書籍がおすすめ!分析に特化しているので取り組みやすいです!
そもそもSQL初心者の方はこちらもおすすめ!とにかく書いて結果を見るのをおすすめします!
答え
SELECT serial, RAND() AS rand FROM ( SELECT serial FROM UNNEST(GENERATE_ARRAY(1, 1000000)) as serial ) ORDER BY 2
解説
GENERATE_ARRAY(開始値,終了値,[オプション 増分])
は、第1引数から第2引数までの連番を配列で生成します。第3引数で増分を指定することができ、3を指定すると、3飛ばしの数列を作成できます。
GENERATE_ARRAY()
は配列を返すので、行に変換するために、UNNEST()
を利用しています。