とりゅふの森

GCPデータエンジニアとして生きる

【BigQuerySQL演習】100万件のデータをランダムソートしよう

f:id:true-fly:20210727223735p:plain

おはようございます、BigQueryのSQL演習シリーズ第一弾の記事です。
BigQuery歴3年超の私が、SQL書いててよく使うなあって書き方を少しずつ紹介していきたいと思っています。
お題 + 答えSQL + 解説の構成です。

今回のお題はこちら!

100万件の商品に1~100万の連番が割り振られているとします。これをランダムソートしよう

今回のルール

  • BigQueryのSQL1回の実行で算出すること
  • 参照するテーブルはナシ
  • 乱数の発生はRAND()を使う

ページスクロールすると答えのSQLと解説が見れます。

BigQueryのSQLを学ぶにはこちらの書籍がおすすめ!分析に特化しているので取り組みやすいです!

集中演習 SQL入門 Google BigQueryではじめるビジネスデータ分析 できるDigital Camp

そもそもSQL初心者の方はこちらもおすすめ!とにかく書いて結果を見るのをおすすめします!

スッキリわかるSQL入門 第2版 ドリル222問付き! スッキリわかるシリーズ

答え

SELECT
   serial,
   RAND() AS rand
FROM (
    SELECT
        serial
    FROM
        UNNEST(GENERATE_ARRAY(1, 1000000)) as serial
)
ORDER BY
    2

f:id:true-fly:20210724230142p:plain

解説

GENERATE_ARRAY(開始値,終了値,[オプション 増分])は、第1引数から第2引数までの連番を配列で生成します。第3引数で増分を指定することができ、3を指定すると、3飛ばしの数列を作成できます。
GENERATE_ARRAY()は配列を返すので、行に変換するために、UNNEST()を利用しています。