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

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

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

はじめに

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

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

5. 集約した結果に条件を指定する

  • \mathrm{COUNT}関数などを用いてテーブルのデータを集約した場合、その結果に対する条件指定には\mathrm{HAVING}句を用いる。
  • 集約関数を書くことができる場所は\mathrm{SELECT}句、\mathrm{HAVING}句、\mathrm{ORDER\ BY}句のみである。
  • \mathrm{HAVING}句は\mathrm{GROUP\ BY}句の後に書く。
  • \mathrm{WHERE}句には「行に対する条件指定」を書き、\mathrm{HAVING}句には「グループに対する条件指定」を書く。

5.1 HAVING句

 \mathrm{GROUP\ BY}句により得たグループに条件を与えるには\mathrm{HAVING}句を用いる。
 \mathrm{HAVING}句は\mathrm{GROUP\ BY}句の後に置かなければならず、

  • 定数
  • 集約関数
  • 集約キー(\mathrm{GROUP\ BY}句で指定した列名)

のみ書くことができる。

-- 用法
SELECT <列名1>,<列名2>,...
FROM <テーブル名>
GROUP BY <列名1>,<列名2>
HAVING <グループの値に対する条件>
-- 用例:COL2の平均が5000よりもTBL.CO1により大きいグルーピングされたグループを表示
SELECT TBL.COL1,AVG(TBL.COL2)
FROM TABLE1 TBL
GROUP BY TBL.COL1
HAVING AVG(TBL.COL2)>5000
5.1.1 集約キーに関する条件をどこに書くべきか

 集約キーに関する条件は\mathrm{GROUP\ BY}句と\mathrm{HAVING}句のいずれにも書くことができる。しかし

  • 元来、\mathrm{WHERE}句が行に対する条件指定であり、コードが読みやすい
  • 一般に\mathrm{WHERE}句にした方が処理速度が速く済む

から\mathrm{WHERE}句に書いた方が良い。

5.2 検索結果の並び替え

  • 検索結果を並び替えるには\mathrm{ORDER\ BY}句を用いる。
  • \mathrm{ORDER\ BY}句の列名の後ろに\mathrm{ASC}を付けると昇順、\mathrm{DESC}を付けると降順で並び替える。
  • \mathrm{ORDER\ BY}句には複数のソートキーを指定できる。
  • ソートキーに\mathrm{NULL}が含まれていた場合、先頭か末尾にまとめられる。
  • \mathrm{ORDER\ BY}句では\mathrm{SELECT}句で付けた列の別名を利用可能である。
  • \mathrm{ORDER\ BY}句では\mathrm{SELECT}句に含まれていない列名や集約関数を利用可能である。
  • \mathrm{ORDER\ BY}句では列番号を用いてはいけない。
5.2.1 ORDER BY句

 クエリで得たデータは基本的にランダムで得られる。\mathrm{ORDER\ BY}句を用いると並び替えることができる。複数の列名を指定することができる。\mathrm{NULL}は比較演算子が使えないため、ソートすると先頭か末尾にまとめて表示される。
 \mathrm{ORDER\ BY}句では\mathrm{SELECT}句で付けた列の別名を利用可能である。

 \mathrm{FROM}\rightarrow\mathrm{WHERE}\rightarrow\mathrm{GROUP\ BY}\rightarrow\mathrm{HAVING}\rightarrow\mathrm{SELECT}\rightarrow\mathrm{ORDER\ BY}\rightarrowという順番で処理されるため、\mathrm{ORDER\ BY}句は\mathrm{SELECT}句で指定していない列名も利用できる。

 \mathrm{ORDER\ BY}句および\mathrm{ORDER\ BY}句では\mathrm{SELECT}句に含まれる列を参照する列番号を用いることができる一方で、

  • コードが読みにくくなる
  • 将来削除されるべき機能に上げられてきた経緯があり、今後使えなくなる可能性がある

から、利用しない方がよい。

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