[SQL入門] データベースのグループ化の基本

データベースのグループ化の基本を説明します。

使用するpostsを表示しておきます。

SELECT * FROM posts;
mysql -h db -t -u dbuser -pdbpass myapp < main.sql

+----+---------+-------+----------+
| id | message | likes | area     |
+----+---------+-------+----------+
|  1 | post-1  |    12 | TOKYO    |
|  2 | post-2  |     8 | OKINAWA  |
|  3 | post-3  |    11 | OKINAWA  |
|  4 | post-4  |     3 | TOKYO    |
|  5 | post-6  |     9 | HOKKAIDO |
|  6 | post-7  |    20 | TOKYO    |
|  7 | post-9  |    31 | HOKKAIDO |
+----+---------+-------+----------+
目次

DISTINCT

DISTINCTを使うと、重複レコードを1つにまとめることができます。

SELECT DISTINCT area FROM posts;
mysql -h db -t -u dbuser -pdbpass myapp < main.sql

+----------+
| area     |
+----------+
| TOKYO    |
| OKINAWA  |
| HOKKAIDO |
+----------+

カウントと組み合わせることもできます。

SELECT COUNT(DISTINCT area) FROM posts;
mysql -h db -t -u dbuser -pdbpass myapp < main.sql

+----------------------+
| COUNT(DISTINCT area) |
+----------------------+
|                    3 |
+----------------------+

GROUP BY

GROUP BYを使うと、レコードをグループ化できます。

SELECT area, SUM(likes) FROM posts GROUP BY area;
mysql -h db -t -u dbuser -pdbpass myapp < main.sql

+----------+------------+
| area     | SUM(likes) |
+----------+------------+
| HOKKAIDO |         40 |
| OKINAWA  |         19 |
| TOKYO    |         35 |
+----------+------------+

HAVING

HAVINGを使うと、レコードを抽出することができます。

SELECT
  area,
  SUM(likes)
FROM
  posts
GROUP BY
  area
HAVING
  SUM(likes) > 30;
mysql -h db -t -u dbuser -pdbpass myapp < main.sql

+----------+------------+
| area     | SUM(likes) |
+----------+------------+
| HOKKAIDO |         40 |
| TOKYO    |         35 |
+----------+------------+
よかったらシェアしてね!

この記事を書いた人

情報工学専攻の修士課程を卒業後、某企業の情報系技術職として勤務。新しいことが好きなので、技術のキャッチアップをして発信しています。

■Skills
C / C++ / JavaScript / Python / Ruby / Git / HTML&CSS

■Hobby
旅行 / カメラ / 動画制作

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次
閉じる