1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BigQuery Tips メモ

Last updated at Posted at 2020-08-31

積算和の計算の仕方

SELECT order_id, SUM(price)
  OVER (
    ORDER BY prices
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS total_prices
FROM orders

中央値(近似値)の出し方

SELECT APPROX_QUANTILES(x, 2)[OFFSET(1)] FROM UNNEST([2.2, 1, 11.5, 6.6, 8, 14, 250 , 1.5, 0.15]) x

APPROX_QUANTILES を使う。number は作成する変位値の数を表します。この関数は、number +1 個の要素からなる配列を返します。最初の要素は近似最小値であり、最後の要素は近似最大値です。 ということなので、2を指定して返却された配列の2つ目の要素が中央値の近似値となる。

全体件数に対するパーセンテージの出し方

SELECT
  fruit,
  COUNT(1) AS cnt,
  SUM(COUNT(1)) OVER() AS total_cnt,
  COUNT(1) / SUM(COUNT(1)) OVER() * 100 AS percentage
FROM
  UNNEST(['Apple', 'Grape', 'Apple', 'Orange', 'Banana', 'Apple', 'Orange', 'Orange', 'Orage', 'Apple', 'Grape']) AS fruit
GROUP BY
  fruit

ビンの作り方

範囲が決まっているとき

RANGE_BUCKETを使う方法

SELECT
  num,
  (RANGE_BUCKET(num,
      GENERATE_ARRAY(0,100,10) ) -1) * 10 AS bins
FROM
  UNNEST([83, 9, 19, 39, 10, 45, 111, -1, -100, 0, 1]) AS num
ORDER BY
  num

ここでは、以下の条件でビンを作った場合

  • ビンの幅は10
  • 最小は、0。最大は、90
  • RANGE_BUCKETの性質上、下の数値が0より小さい場合、-10になり、100より大きい場合100になるため、それらを範囲外として処理などする必要あり

範囲が決まっていないとき

FLOORで計算する方法

SELECT
  num,
  CAST(FLOOR(num / 10) * 10 AS INT64) as bins
FROM
  UNNEST([83, 9, 19, 39, 10, 45, 111, -1, -100, 0, 1]) AS num
ORDER BY
  num

ビンの幅を10とした場合

指定開始日から一定期間の日付連続値を作る

2000/1/1からスタートして、100日分作る場合。日によってデータが抜けるレコードがある場合などの日付のテンプレートに使ったり。

SELECT
  DATE_ADD("2000-01-01",INTERVAL i DAY)
FROM
  UNNEST(GENERATE_ARRAY(1,100,1)) AS i

クエリのフォーマットを素早く行う

BigQueryのコンソール上でクエリを書いていると見づらくなって、ちょくちょく「フォーマット」して整えたくなるけど、ボタンからクリックするのはちょっと面倒。

ショートカットで command + shift + f で行える。(Macのば場合)

ちょっとしたサンプルデータの作り方

CREATE TABLE `tmp.users` AS 
SELECT * 
FROM UNNEST(ARRAY<STRUCT<id INT64, name STRING, age INT64>>
[(1, 'John', 35),
 (2,'Mike', 27),
 (3, 'Brian', 23),
 (4, 'Jack', 45),
 (5, 'Nick', 33)]) AS users
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?