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

  • URLをコピーしました!

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

使用する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 |
+----------+------------+
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

情報工学の修士号を取得後、新卒で大手メーカーに就職。2022年にWeb系企業に転職。
役立つサービスや日々思ったことを発信中。
趣味は旅行、カメラ、動画制作。

コメント

コメントする

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

目次