Help us understand the problem. What is going on with this article?

PHPをやってみたいので、MySQLもやってみる(その4)

More than 3 years have passed since last update.

はじめに

この記事はPHPをやってみたいので、MySQLもやってみる(その3)の続きです。

備忘録なので、足りない分や、もっとこうしたらよかったとかは、後から追加修正していきます。

テーブルのレコードを並び替える

下記のようなテーブルがあるとします。

mysql> select * from users;
+-------+------+---------+
| name  | age  | address |
+-------+------+---------+
| taro  |   13 | tokyo   |
| jiro  |   10 | osaka   |
| sato  |   18 | tokyo   |
| kato  |   25 | osaka   |
| ando  |   60 | miyagi  |
| ohara |   70 | tokyo   |
+-------+------+---------+

これを、ageの値で並び変えてみます。

並び替えにはorder by {フィールド名} {asc(昇順)|desc(降順)}を使用します。

mysql> select * from users order by age asc;
+-------+------+---------+
| name  | age  | address |
+-------+------+---------+
| jiro  |   10 | osaka   |
| taro  |   13 | tokyo   |
| sato  |   18 | tokyo   |
| kato  |   25 | osaka   |
| ando  |   60 | miyagi  |
| ohara |   70 | tokyo   |
+-------+------+---------+

ageが小さい順に並び替わりました。

大きい順に並び替えるにはdescを使用します。

mysql> select * from users order by age desc;
+-------+------+---------+
| name  | age  | address |
+-------+------+---------+
| ohara |   70 | tokyo   |
| ando  |   60 | miyagi  |
| kato  |   25 | osaka   |
| sato  |   18 | tokyo   |
| taro  |   13 | tokyo   |
| jiro  |   10 | osaka   |
+-------+------+---------+

name(文字列)で並び替えると下記のようになります。

mysql> select * from users order by name asc;
+-------+------+---------+
| name  | age  | address |
+-------+------+---------+
| ando  |   60 | miyagi  |
| jiro  |   10 | osaka   |
| kato  |   25 | osaka   |
| ohara |   70 | tokyo   |
| sato  |   18 | tokyo   |
| taro  |   13 | tokyo   |
+-------+------+---------+

取得件数を制限する

データの取得件数を指定してみます。
件数を指定するにはlimit {抽出する件数}を使用します。

mysql> select * from users limit 4;
+------+------+---------+
| name | age  | address |
+------+------+---------+
| taro |   13 | tokyo   |
| jiro |   10 | osaka   |
| sato |   18 | tokyo   |
| kato |   25 | osaka   |
+------+------+---------+

開始位置を指定する

取得開始位置を指定するにはlimit {取得開始位置},{抽出する件数}を使用します。

下記の例では、データの4件目から2件取得します。

※開始位置は0スタート。

mysql> select * from users limit 4,2;
+-------+------+---------+
| name  | age  | address |
+-------+------+---------+
| ando  |   60 | miyagi  |
| ohara |   70 | tokyo   |
+-------+------+---------+

例えばageの上位3件を取得するには下記の様になります。

mysql> select * from users order by age desc limit 3;
+-------+------+---------+
| name  | age  | address |
+-------+------+---------+
| ohara |   70 | tokyo   |
| ando  |   60 | miyagi  |
| kato  |   25 | osaka   |
+-------+------+---------+

レコードの総件数を取得する

レコードの総件数を取得する場合は、countを使用します。

mysql> select count(*) from users;
+----------+
| count(*) |
+----------+
|        6 |
+----------+

フィールドの重複行を除外した値を取得

フィールドにから、重複した値を除いてユニークな値だけ取得してみる。

抽出するにはdistinct {フィールド名}を使用する。

mysql> select distinct address from users;
+---------+
| address |
+---------+
| tokyo   |
| osaka   |
| miyagi  |
+---------+

フィールドの最大値を取得

フィールドの最大値を取得する場合はmax({レコード名})を使用する。

mysql> select max(age) from users;
+----------+
| max(age) |
+----------+
|       70 |
+----------+

フィールドの平均値を取得

フィールドの平均を取得する場合はavg({レコード名})を使用する。

mysql> select avg(age) from users;
+----------+
| avg(age) |
+----------+
|  32.6667 |
+----------+

address毎の平均値を取得

特定のグループ毎に平均値を出したい場合はgroup by {フィールド名}を使用します。

mysql> select address,avg(age) from users group by address;
+---------+----------+
| address | avg(age) |
+---------+----------+
| miyagi  |  60.0000 |
| osaka   |  17.5000 |
| tokyo   |  33.6667 |
+---------+----------+

フィールドの合計値を取得

フィールドの平均を取得する場合はsum({レコード名})を使用する。

mysql> select sum(age) from users;
+----------+
| sum(age) |
+----------+
|      196 |
+----------+

終わり

少しずつレコードの取得方法もわかってきました。
簡単なデータなら登録して、取得することができそうです。

nogson
へっぽこデザイナーです。
https://satofaction.net/
willgroup
個と組織をポジティブに変革する「チェンジエージェントグループ」
https://willgroup.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away