見出し画像

翻訳としてのデータ分析#28 シンプルな用途に絞ったGROUP BY

原文抜粋 : 語尾に「が」を付けるとき

逆接でない「が」はできるだけ避けたい。

『ぼくは翻訳についてこう考えています -柴田元幸の意見100-』より

データ分析に置き換えて考える

本来の用途ではない使い方を避けたいコト…。SQLでのGROUP BYについて書こう。

僕が面接などで、データ分析に関するSQL経験が豊富かどうかを測るポイントは3つある。Google BigQuery の standardSQL の場合だが。

1. window関数を使えるか
GROUP BYの結果をJOINする代わりにwindow関数を使っているか

2. CROSS JOINを応用できるか
ユーザ×日など、キー項目を組み合わせたマスタをつくれるか

3. UNNEST, SPLITを使えるか
区切り文字で連結されたデータやARRAY形式のデータを、通常のレコード単位にバラせるか

だ。3番は、最近追加した。

で、1番のwindow関数だが。window関数は応用範囲が広く、「これができたら使えている人!」というのを一概に言いにくい。が、抵抗感なく使いこなせているという意味で、「GROUP BYの結果をJOINする代わりにwindow関数を使う」としている。

window関数でできることは、基本的には、WITH句やサブクエリで、GROUP BYした結果をJOINすれば再現できる。だが、window関数を使った方が、クエリが大分短縮される。

また、これは個人的な好みだが。

GROUP BY は集約する処理のときだけに使いたい。一番シンプルな用途に絞りたいと思っている。

対して、元のテーブルに集計情報を付加したいときには、window関数を使う。そういう風に、役割分担して使った方が、クエリを見返したときに、可読性が高まる。自分ルールでしかないのだけど。

SQLというのは、他のプログラミング言語と異なり、とかく長くなりがちだ。そして分析の考察を深めようとするほど、長くならざるを得ない業を抱えている。だから、大幅に記述を短縮できるwindow関数は積極的に使うべきだと考えている。

また、SQLに習熟するほど、ミスを防ぎながら高速で書いていくために、細かなところで自分ルールを持っている人は多い。僕にとって、その1つが、GROUP BYとwindow関数の役割分担だ。

まあ、後者は「だから使ってね!」と言いにくいから、動機の説明としては、前者を用いる。

いずれにせよ、読みやすいクエリを書いていけたらいいなと思う。
そして、できれば、他の人が真似したくなる哲学を、自分のクエリで感じさせられたらいいなと思っている。

サポートされた者たちから受け継いだものはさらに『先』に進めなくてはならない!!