BigQueryの分析関数が便利
他のシステムやSQL標準ではウィンドウ関数と呼ばれているらしい
どういうことができるの?
A. それぞれの生徒について、自分のクラス内での身長の順位を取得する
code:A.sql
SELECT
name,
height,
classCode,
RANK() OVER (PARTITION BY classCode ORDER BY height DESC)
FROM students
B. それぞれの商品について、付属する画像の情報を1つ取得する
code:B.sql
SELECT DISTINCT
productCode,
name,
price,
FIRST_VALUE(imageURL) OVER (PARTITION BY productCode ORDER BY imageID)
FROM products
INNER JOIN images ON images.productCode = products.productCode
要は、ある値によってデータをグループ分けして、そのグループの中で集計などを行う
サブクエリじゃダメ?
code:B.sql
SELECT
productCode,
name,
price,
(
SELECT imageUrl FROM images
WHERE images.productCode = products.productCode
LIMIT 1
)
FROM products
BigQueryでは、相関サブクエリは場合によっては実行できない
Error: Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN.
(エラー: 相関サブクエリは、有効なJOINに変換するなどして相関がない形にできない限りはサポートされません。)
他のシステムではどうなのか知らん