前回
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句
クエリで得たデータは基本的にランダムで得られる。句を用いると並び替えることができる。複数の列名を指定することができる。
は比較演算子が使えないため、ソートすると先頭か末尾にまとめて表示される。
句では
句で付けた列の別名を利用可能である。
という順番で処理されるため、
句は
句で指定していない列名も利用できる。
句および
句では
句に含まれる列を参照する列番号を用いることができる一方で、
- コードが読みにくくなる
- 将来削除されるべき機能に上げられてきた経緯があり、今後使えなくなる可能性がある
から、利用しない方がよい。