順番に並べる ORDER BY句

データベース

SELECT文で抽出されるレコードの順は不定です。処理系によって挿入された順だったり、更新の古い順だったり、見かけ上まったくランダムだったりと様々です。

もし抽出されるレコードを特定のカラムの値に注目して整列させたい場合は、ORDER BY句を使います。

ORDER BY句の構文

ORDER BY カラム名 [ASCまたはDESC] [, カラム名 [ASCまたはDESC] …]

レコードをカラム名の値に従って並べ替えます。

カラム名の後にASCと記述すると昇順、DESCと記述すると降順となります。省略した場合は昇順です。
複数のカラムをカンマ区切りで書いた場合、まず第1のカラムの値で並べ替え、第1のカラムの値が同じものの中で第2のカラムの値で並べ替え…となります。

ここまでに学んだすべての句をまとめてみましょう。

句の記述の順番は以下の通りです。

SELECT カラム名・関数・計算式 FROM テーブル
WHERE 条件式1
GROUP BY カラム名
HAVING 条件式2
ORDER BY カラム名;

各句の実行のタイミングは以下の通りです。

1.テーブルから、WHERE句の条件式1を満たすレコードが抽出される。
2.1で抽出されたレコードがGROUP BY句のカラム名でグループ化される
3.2でグループ化されたグループごとに関数・計算式の値が求められる
4.3の結果からHAVING句の条件式2を満たすものが抽出される
5.4の結果をORDER BY句に従って並べ替える

つまり、ORDER BY句が実行されるのは一番最後です。

ORDER BY句の例

例1
SQL
SELECT * FROM meibo ORDER BY height;
実行結果

カラムheightの値の昇順にレコードが出力されました。

例2

計算の結果に基づいて並べ替えることも出来ます。

SQL
SELECT name, ROUND(weight/POW((height/100),2), 1) AS BMI FROM meibo
     ORDER BY BMI DESC;
実行結果

BMI計算のサンプルにORDER BY句を追加し、BMIの値の降順に並べ替えるようにしました。

例3

グループ化・グループ関数の計算結果について並べ替えることも出来ます。

SQL
SELECT subject, ROUND(AVG(score),1) AS average
      FROM examination GROUP BY subject ORDER BY average DESC;
実行結果

試験の各科目の平均値が高い順に並べ替えています。

コメント

タイトルとURLをコピーしました