select 表示するカラム名 from テーブル名 group by グルーピングするカラム名;
グルーピングとは、重複して登録されたレコードをひとつにまとめて表示すること。
登録しているデータに影響はない。
count()関数を使うと、グルーピングした際の重複するレコード数を数える。
この数を検索条件として使うこともできる。
実行例
グルーピングしない場合
mysql> select * from linklog;
+---------------------+--------------------+----------+---------+
| date | refer | agent | host |
+---------------------+--------------------+----------+---------+
| 2005-10-03 17:43:01 | www.yahoo.co.jp | Mozila | yahoobb |
| 2005-10-03 17:44:06 | www.msn.co.jp | IE | proxy |
| 2005-10-03 17:44:54 | www.msn.co.jp | Mozila | ispA |
| 2005-10-03 17:45:25 | www.excite.co.jp | FireFox | ispB |
| 2005-10-03 17:45:52 | www.yahoo.co.jp | Mozila | proxy |
| 2005-10-03 17:47:02 | www.livedoor.co.jp | Netscape | so-net |
| 2005-10-03 17:48:39 | www.google.co.jp | Sleipnir | usen |
| 2005-10-03 17:49:11 | www.yahoo.co.jp | Mozila | yahoobb |
+---------------------+--------------------+----------+---------+
8 rows in set
referでグルーピングした場合
mysql> select refer from linklog group by refer;
+--------------------+
| refer |
+--------------------+
| www.excite.co.jp |
| www.google.co.jp |
| www.livedoor.co.jp |
| www.msn.co.jp |
| www.yahoo.co.jp |
+--------------------+
5 rows in set
referでグルーピングして、集計した数を表示する場合
mysql> select refer,count(*) from linklog group by refer;
+--------------------+----------+
| refer | count(*) |
+--------------------+----------+
| www.excite.co.jp | 1 |
| www.google.co.jp | 1 |
| www.livedoor.co.jp | 1 |
| www.msn.co.jp | 2 |
| www.yahoo.co.jp | 3 |
+--------------------+----------+
5 rows in set
referでグルーピングして、集計した数を検索条件として表示する場合(集計数が2以上のグループを表示)
mysql> select refer,count(*) from linklog group by refer having count(*) >= 2;
+--------------------+----------+
| refer | count(*) |
+--------------------+----------+
| www.msn.co.jp | 2 |
| www.yahoo.co.jp | 3 |
+--------------------+----------+
2 rows in set