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

##はじめに
この記事は<a href="http://qiita.com/nogson/items/5bbd883cfe3b8fece931">PHPをやってみたいので、MySQLもやってみる(その３）</a>の続きです。

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

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

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

```
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件取得します。<br>
※開始位置は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 |
+----------+
```

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