Slide 43
Slide 43 text
#standardSQL
WITH dice_twice AS(
SELECT
ROW_NUMBER()OVER() AS row_id
,side1
,side2
,side1 + side2 AS side_sum
,COUNT(1)OVER() AS nrow
FROM
UNNEST(GENERATE_ARRAY(1, 6)) AS side1,
UNNEST(GENERATE_ARRAY(1, 6)) AS side2
),
randTable AS(
SELECT
simulation_id
,RAND() AS randNum
FROM
UNNEST(GENERATE_ARRAY(1, 10000)) AS simulation_id
)
SELECT
side_sum
,COUNT(1) AS cnt
FROM
dice_twice CROSS JOIN randTable
WHERE
FLOOR(randNum / (1/nrow)) + 1 = row_id
GROUP BY
1
ORDER BY
1
行番号
サイコロA
の出目
サイコロB
の出目
2つの
サイコロの合計
全行数
row_id side1 side2 side_sum nrow
1 1 1 2 36
2 1 2 3 36
3 1 3 4 36
…
34 6 4 10 36
35 6 5 11 36
36 6 6 12 36
2つのサイコロの出目テーブル:dice_twice
■サイコロ2個の出目の合計のシミュレーション例 ※以下クエリはそのまま実行できます
以下のように、シミュレーション回数分の乱数を発生させたテーブルを
CROSS JOINして、乱数を適当な条件として用いればよい
1万回、乱数を
発生させた
テーブル
シミュレ
ーション
実行
43 / 58