投稿日時:

「RDBMSの機能を100%活かしたいならSQLを学ぶべし。」
「SQLを使いこなすためにはサブクエリーを学ぶべし。」

私はデータベース関連のセミナーにおいて、常にこの様なお話しをしています。
そこで、今回もSQLのサブクエリーを使用して、下記のようなデータを集計する方法を紹介しましょう。

まずはコチラのサンプルファイルをダウンロードし、ファイルを開いてみてください。

「服用履歴」テーブルは「誰が」「いつ」「なんの薬品を服用したか」を管理している履歴テーブルです。
このテーブルからX氏が服用している薬品が何種類あるか集計してみましょう。

下記のSQLで集計できます。

SELECT COUNT(薬品) AS 種類の数 FROM (SELECT DISTINCT 薬品 FROM 服用履歴 WHERE 人物 = 'X') AS Alias;

「サンプルのクエリ1」をわかりやすく記載すると、以下の様になります。

SELECT 表示したい列 FROM ここから

このSQLのポイントは「ここから」にテーブルではなくサブクエリーを挿入している事です。
これによりサブクエリーで抽出したデータに対して、SELECT(選択)が実行可能となります。

次に、このSQLを応用して、人物別に服用している薬品が何種類あるか集計してみましょう。
(サンプルのクエリ2)

SELECT 人物,COUNT(薬品) AS 種類の数 FROM (SELECT DISTINCT 人物,薬品 FROM 服用履歴) AS Alias GROUP BY 人物;

Accessのデザインビューによるクエリでは、このような集計はできません。

なお、このSQLはAccess用に作っているものなので、RDBMSによっては動作しない製品もあるのでご注意して下さい。

そこで、最後にもう一度。
「RDBMSの機能を100%活かしたいならSQLを、そしてサブクエリーを学ぶべし!!」

(担当:奥田 英太郎