Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。今回は、前回に引き続き集約と並び替えについて。金額でのソート、IDでのソート、日付のソートなど思いつくだけでも色々な使い方があります。KEYまとめ例としてこのようなテーブルを使います。BY指定したキー(フィールド)の値でグループ分けします。以下の例の場合、各カテゴリごとに分けて、それぞれのカテゴリの個数を求めています。|+-----------+----------+HAVINGGROUP分けしたもののWHERE文に相当するもの。以下の例ではカテゴリごとにグループ分けを行い、グループの合計VALUEが100000以上のものを抽出しています。|+-----------+------------+グループ分けしないで使おうとすると怒られます。BY指定したフィールド及び条件で並び替えを行う。非常に使用頻度が高い。入力した場合、VALUEフィールドの値で昇順で並び替えを行う。'DESC'と入力した場合、降順で並び替えを行う。|+------+--------------------+---------+------------+-----------+個人的にはDESCをよく使う。実例では、ブログの記事の一覧。新しい日付が先頭になって、順番に古い日付に向かっていく形になるんですよね。そこから先頭から何個か取り出してるんですよ。実例GROUPと集約関数ここまで、いくつかGROUPと集約関数を降りませた例をあげましたが、より深く見ていきます。GROUPを使わない場合、集約関数を使うと単一の結果だけになります。|+-------------+イメージにしてみると、こんな感じです。すべてのレコードが1つのグループになっているイメージです。ここでカテゴリごとにグループ化して平均値を集計すれば、というイメージになります。実際にやってみると、下の結果になります。BYを使う場合、SELECTで指定できるフィールドに制限がかかります。GROUPに指定したフィールドか、集約関数,もしくは定数しか指定できません。言うと、「表示できるものがない」からです。以下のようなSQL文があったとします。Category;この実行結果はエラーです。Categoryでグループ分けされているので、Categoryは表示できます。NAMEは、どれを表示すればいいんでしょう?複数ありますよね。何を表示すればわからないからできませんよ!というイメージです。なんでもいいから1つだけ表示!という場合、MAX,MINなどを使えばいいでしょう。|+--------------+-----------+これで1つだけ表示させることができます。これを利用すると、グループ内で並び替えて先頭の要素を表示!ということができます。HAVINGは似たような性質を持っています。どちらも結果の抽出を行うのが目的です。|+-----------+----------+------------+以下の2つのアプローチを取ることができます。;では、どう使い分けていくか。本書の解説を引用します。私は、こういう集約キー(※ここではCategoryのこと)に対する条件はWHEREに書くべきだと思います。私がこのように考える理由は2つあります。1つは、WHERE句とHAVING句の役割の違いという、根本的なものです。<中略>HAVING句というのはグループに対する条件を指定するものです。したがって、単なる「行」に対する条件は、WHERE句で書くようにしたほうがお互いの機能をはっきりさせて、読みやすいコードになります。1つは、実行速度に違いが出てくる事があるためです。BYに指定するキーとなるフィールドは、複数指定できます。複数指定した場合、左側から優先されます。以下の様なSQL文になります。|+------+--------------------+---------+------------+-----------+Dateが同じキャビネット、えんぴつはより高いキャビネットが上になっています。|+------+--------------------+---------+------------+-----------+という結果になります。こちらではより安いえんぴつが上になっています。まとめ集約、並び替えは様々な条件で使うことができる。WHEREとHAVINGの関係を意識する。今回は引き続きSQLのお勉強、述語を勉強していきます。各関数について勉強していきます。VIEWについてOracleは放置(オイ)して、SQL本読書に戻ります。»Profile某製造業の社内Sler。今のお仕事のメインはAccessとVBA。元パッケージソフト開発者。VBA、そしてRDBやNoSQLを組み合わせたアプリケーション開発を得意としています。福岡県、もしくは熊本県へIターン転職に向けて、DB/NoSQLの業務に関われる会社を探しています。レベル1取得しましたリファクタリングの帽子をかぶるということ勉強は大変だが役に立つCUIなCentOS7にcinnamonを導入するLinuxのコマンドはMacOSXでそのまま動くとは限らない月別アーカイブTwitterGooglePocketはてなブログをはじめよう!stonebeach-dakarさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。