「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。

MENU

データベースとSQL(12/20)

はじめに

 データ分析を行う場合、データの管理運用、蓄積も重要な論点となる。そのためにはSQLやデータベースの知識が求められる。そこでまずは

を基にSQLの勉強をしていく。

9. 相関サブクエリ

  • 相関サブクエリは小分けにしたグループ内での比較をするときに使います。
  • \mathrm{GROUP\ BY}句と同様に相関サブクエリも集合の「カット」機能を持っている。
  • 相関サブクエリの結合条件はサブクエリ内に書かないとエラーを起こす。

9.1 相関サブクエリとは

 たとえばサブクエリの場合のように、特定のグループごとに集計値を算出し比較抽出する場合、通常のサブクエリ(スカラ・サブクエリ)は利用できない。この場合\mathrm{GROUP\ BY}を用いることになるが、その結果、1行1列にならないためである。これを解消するのに相関サブクエリを用いる。

-- 相関サブクエリのイメージ
SELECT Y1, Y2, Y3
FROM TABLE1 AS TBL1
WHERE Y3 > (SELECT AVG(Y3)
                       FROM TABLE AS TBL2
                       WHERE TBL1.Y2 = TBL2.Y2
                       GROUP BY TBL.Y2)
-- 以下はエラーを起こす:
SELECT Y1, Y2, Y3
FROM TABLE1 AS TBL1
WHERE TBL1.Y2 = TBL2.Y2 -- WHERE句をサブクエリからクエリに移した
WHERE Y3 > (SELECT AVG(Y3)
                       FROM TABLE AS TBL2
                       GROUP BY TBL.Y2)

上記の\mathrm{WHERE}句によりY2の分類内で比較を行うようにしたことが通常のサブクエリと相違する。
 このように相関サブクエリもまた\mathrm{GROUP\ BY}句のように集合を分割していることに他ならない。

9.2 相関サブクエリの注意点

 相関サブクエリは\mathrm{WHERE}句を加えたことで通常のサブクエリとは違う条件を付けることが可能になった。この\mathrm{WHERE}句による制約条件はスコープの問題でメインのクエリ側に移すことはできない。すなわち相関名はサブクエリ内で定義した以上、サブクエリ外では適用できない*1

*1:ローカル変数とグローバル変数の違いに近い。

プライバシーポリシー お問い合わせ