前回
5. 集約した結果に条件を指定する
- 関数などを用いてテーブルのデータを集約した場合、その結果に対する条件指定には句を用いる。
- 集約関数を書くことができる場所は句、句、句のみである。
- 句は句の後に書く。
- 句には「行に対する条件指定」を書き、句には「グループに対する条件指定」を書く。
5.1 HAVING句
句により得たグループに条件を与えるには句を用いる。
句は句の後に置かなければならず、
- 定数
- 集約関数
- 集約キー(句で指定した列名)
のみ書くことができる。
-- 用法 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 集約キーに関する条件をどこに書くべきか
集約キーに関する条件は句と句のいずれにも書くことができる。しかし
- 元来、句が行に対する条件指定であり、コードが読みやすい
- 一般に句にした方が処理速度が速く済む
から句に書いた方が良い。
5.2 検索結果の並び替え
- 検索結果を並び替えるには句を用いる。
- 句の列名の後ろにを付けると昇順、を付けると降順で並び替える。
- 句には複数のソートキーを指定できる。
- ソートキーにが含まれていた場合、先頭か末尾にまとめられる。
- 句では句で付けた列の別名を利用可能である。
- 句では句に含まれていない列名や集約関数を利用可能である。
- 句では列番号を用いてはいけない。
5.2.1 ORDER BY句
クエリで得たデータは基本的にランダムで得られる。句を用いると並び替えることができる。複数の列名を指定することができる。は比較演算子が使えないため、ソートすると先頭か末尾にまとめて表示される。
句では句で付けた列の別名を利用可能である。
という順番で処理されるため、句は句で指定していない列名も利用できる。
句および句では句に含まれる列を参照する列番号を用いることができる一方で、
- コードが読みにくくなる
- 将来削除されるべき機能に上げられてきた経緯があり、今後使えなくなる可能性がある
から、利用しない方がよい。