ここではMySQLでの並び替え、範囲、グループ化ついて解説していきます。
tb1
id | name | age |
1 | 田中 | 27 |
2 | 山田 | 28 |
3 | 佐藤 | 29 |
4 | 鈴木 | 30 |
5 | 中村 | 30 |
今回はこのテーブルを例として解説していきます。
並び替え
SELECT * FROM tb1 ORDER BY id ASC;
書式
SELECT カラム名 FROM テーブル名 ORDER BY カラム名;
「ORDER BY id;」もしくは「ORDER BY id ASC;」とすることで、指定したカラムで降順に並び替えて表示します。
昇順で並び替えるには「ORDER BY id DESC;」とします。
降順「ASC」は省略できますが、昇順「DESC」は省略できません。
表示する範囲の指定
SELECT * FROM tb1 ORDER BY id LIMIT 2;
実行結果
id | name | age |
1 | 田中 | 27 |
2 | 山田 | 28 |
書式
SELECT カラム名 FROM テーブル名 LIMIT 表示件数;
「LIMIT」を使うことによって、表示するレコード数を指定することができます。
又、「LIMIT」後の数値をコンマで区切り指定することで、表示範囲を指定することができます。
SELECT * FROM tb1 ORDER BY id LIMIT 1,2;
実行結果
id | name | age |
2 | 山田 | 28 |
3 | 佐藤 | 29 |
レコードの最初の番号は「0」となるので、「LIMIT 1, 2;」と指定することで、1~2番目のデータが表示されます。
グループ化
tb1
id | sales |
1 | 1000 |
1 | 2000 |
2 | 500 |
2 | 200 |
3 | 5000 |
3 | 6000 |
今回はこのテーブルを例として解説していきます。
SELECT id, AVG(sales) FROM tb1 GROUP BY id ORDER BY AVG(sales);
実行結果
id | sales |
2 | 350.0000 |
1 | 1500.0000 |
3 | 5500.0000 |
書式
SELECT カラム名 FROM テーブル名 GROUP BY カラム名;
「GROUP BY」を使用することでカラム名が同じものだけグループ化して表示させることができます。
例では「AVG()」関数を使用しておりグループ化したデータの平均でソートして表示しています。
グループ化後の条件
SELECT id, AVG(sales) FROM tb1 GROUP BY id HAVING AVG(sales) <= 1500 ORDER BY AVG(sales);
実行結果
id | sales |
2 | 350.0000 |
1 | 1500.0000 |
書式
SELECT カラム名 FROM テーブル名 GROUP BY カラム名 HAVING 条件式;
「GROUP BY」でグループ化したデータに条件式を定義する場合「HAVING」句を使用します。
例では売り上げの平均値が1500以下のものを表示させています。
記述の順序
いままで解説してきたもので記述の順序が違うとエラーになるのでMySQLの順番として
①SELECT
②FROM
③WHERE
④GROUP BY
⑤HAVING
⑥ORDER BY
⑦LIMIT
この順番で書くようにしましょう。