BigQueryのSTRINGを連結する際,調べるとサブクエリでやORDER BYやDISTINCTしてから連結する記事が見つかります. しかし,サブクエリは他の人が見た時にとても分かりづらく,中々メンテナンスのコストがかかってしまいます.
そのため,サブクエリを使わないSTRINGを連結するやり方です. といってもいくつかBigQueryのドキュメントを見れば分かることです.
BigQueryやSQLServerではSTRING_AGGを使えばかなり楽に書けますという話です.
以下のようなuser_idに対して,何のフルーツを食べたかというテーブルデータがあったとします.
WITH fruit_log AS (
SELECT 'XXX' AS user_id, 'Apple' AS ate_fruit
UNION ALL SELECT 'XXX', 'Banana'
UNION ALL SELECT 'YYY', 'Orange'
UNION ALL SELECT 'YYY', 'Apple'
UNION ALL SELECT 'ZZZ', 'Orange'
UNION ALL SELECT 'ZZZ', 'Orange'
)
SELECT * FROM fruit_log
このとき以下のようにuser_idごとに食べたフルーツを羅列したい場合があります.
SELECT
user_id,
STRING_AGG(DISTINCT ate_fruit ORDER BY ate_fruit) AS ate_fruits
FROM
fruit_log
GROUP BY
user_id
単発分析ならともかく,レポートなどで運用するクエリを書く場合は可読性を意識して書きましょう.
mysql使っていたので知らなかったのですが,STRING_AGGが強い.