LoginSignup
3
1

More than 5 years have passed since last update.

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

Posted at

はじめに

この記事は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 |
+----------+

終わり

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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1