見出し画像

『データ分析に強くなるSQLレシピ』はなぜ「小規模データ」に注目したのか?

新刊『データ分析に強くなるSQLレシピ』を8月5日に刊行することになりました。この書籍のサブタイトルは「小規模データの前処理・分析の書き方&テクニック」。
なぜ「小規模データ」に注目したのか、その理由を紹介します。

中央値を求めるには?

突然ですが、データベースに格納されているデータの中央値を求めるとき、あなたならどうしますか?

SQLには統計的な計算ができる関数が多く用意されています。たとえば、合計を求めるにはSUM、平均を求めるにはAVG、最大値を求めるにはMAX、最小値を求めるにはMINなどが有名です。

しかし、多くのRDBMSには中央値を求める関数はありません。
その理由として、中央値を求めるにはデータを並べ替えてデータの件数を調べ、その中央に該当する値を取得しなければならないからです。

並べ替えやデータの件数を調べるのは関数で用意されていますが、中央に該当する値を取得するには前から半分までのデータを読み飛ばすなどの処理が必要です。
このように、中央値を求める処理はそれほど単純ではないのです。

ここで大事なのは中央値を求めるSQLを書けることではありません。
それよりも、中央値を求めるときの考え方(並べ替え、データの件数を調べる、半分まで読み飛ばす)と、それを実装する力が重要です。

小規模データならではのSQL

さて、ここで本書のテーマである「小規模データ」が登場します。
中央値を求めるようなSQLは上記のように決して効率がよいものではありません。大量のデータが格納されているデータベースに対して実行すると、その処理には時間がかかります。

このため、中央値を求めるような処理はSQLで書くのではなく、他のプログラミング言語で書けばよいと考える人もいるでしょう。
ここで問題になるのは、SQLを書くのはプログラマだけではない、ということです。プログラマであれば複数のプログラミング言語を使いこなせるかもしれませんが、一般的なビジネスパーソンでは複数の言語を学ぶのは大変です。

しかし、小規模なデータしか格納されていないデータベースであれば、中央値を求める程度の処理は問題なく処理できます。
SQLは複雑にはなるものの、データベース上で処理できるのです。

もちろん、ビジネスパーソンであればExcelのような表計算ソフトを使うという選択肢もあります。
しかし、わざわざCSV形式などにエクスポートして表計算ソフトで取り込んで計算する、という作業を毎月のように繰り返すのであれば、データベース上で処理すると効率がよいでしょう。

複数のRDBMSに対応する

このようなSQLを書くときに問題になるのは、使用しているRDBMSによってSQLの記述が異なることです。
世の中には、MySQLやPostgreSQL、SQLiteなどさまざまなRDBMSがあります。組織によって使用しているRDBMSは異なり、それぞれのRDBMSは独自にSQLを拡張しています。「標準SQL」は定められているものの、RDBMSによって書き方が違うのです。

そこで本書では、MySQL、PostgreSQL、SQLiteという3つのRDBMSについて、それぞれでの書き方を解説しています。
このため、上記のRDBMSのいずれかを使っている方であれば、どれを使っていても対応できますし、複数のRDBMSでの書き方を比較したい、という方でも大丈夫です。

まとめ

書店にはSQLについての多くの書籍が並んでいますが、その多くは大規模なデータを扱うことを前提としています。そして、実行するSQLの実行計画などを見て、より高速に処理する方法を提示しています。

本書はテーブルの正規化などには触れているものの、SQLの実行速度をそれほど追求してはいません。
多くのビジネスパーソンが使うような小規模なデータベースであれば、それほど処理速度に差が出ないためです。

ちょっとしたデータが格納されているデータベースに対し、気軽に実行できるSQLを書き方を学んでいただければと思います。


この記事が気に入ったらサポートをしてみませんか?