chaptersカラムをGROUP BY句で同じbook_idのグループとして1つのレコードにしたい。
下記のレコードがbookstore
データベースのchapters
テーブルです。
mysql> SELECT * FROM chapters;
+----+--------+--------------------+---------+---------------------+
| id | number | title | book_id | created_at |
+----+--------+--------------------+---------+---------------------+
| 1 | 1 | MySQLとは | 1 | 2021-03-08 23:01:34 |
| 2 | 2 | テーブルとは | 1 | 2021-03-08 23:02:32 |
| 3 | 3 | CRUDとは | 1 | 2021-03-08 23:13:31 |
| 4 | 1 | Rubyとは | 3 | 2021-03-08 23:22:03 |
| 5 | 2 | 変数とは | 3 | 2021-03-08 23:23:29 |
| 6 | 3 | 関数とは | 3 | 2021-03-08 23:24:23 |
+----+--------+--------------------+---------+---------------------+
6 rows in set (0.00 sec)
chapters
カラムをGROUP BY句で同じbook_id
のグループとして1つのレコードにするために以下のサンプルのレコードを表示させて頂きたいのですが、
mysql> SELECT * FROM chapters GROUP BY book_id;
+----+--------+-------------+---------+---------------------+
| id | number | title | book_id | created_at |
+----+--------+-------------+---------+---------------------+
| 1 | 1 | MySQLとは | 1 | 2020-08-31 05:15:43 |
| 4 | 1 | Rubyとは | 3 | 2020-08-31 09:20:30 |
+----+--------+-------------+---------+---------------------+
実際には下のようなエラーが表示されてしまいました。
mysql> SELECT * FROM chapters GROUP BY book_id;
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains n
onaggregated column 'bookstore.chapters.id' which is not functionally dependent on column
s in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
それからchapters
カラムをGROUP BY
句で同じbook_id
のグループとして1つのレコードにさせて頂いたり、
GROUP BY
句で同じbook_id
のグループとして1つのレコードにされたchapters
カラムの数を集計させて頂くために、
以下のサンプルのレコードを表示させて頂きたいのですが、
mysql> SELECT *, COUNT(*) FROM chapters GROUP BY book_id;
+----+--------+-------------+---------+---------------------+----------+
| id | number | title | book_id | created_at | COUNT(*) |
+----+--------+-------------+---------+---------------------+----------+
| 1 | 1 | MySQLとは | 1 | 2016-12-14 04:33:57 | 3 |
| 4 | 1 | Rubyとは | 3 | 2016-12-14 04:40:05 | 3 |
+----+--------+-------------+---------+---------------------+----------+
実際には下のようなエラーが出てしまいました。
mysql> SELECT *, COUNT(*) FROM chapters GROUP BY book_id;
Expression #1 of SELECT list is not in GROUP BY clause and contains non
aggregated column 'bookstore.chapters.id' which is not functionally dependent on columns in
GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
GROUP BY
句を用いる際に、「*」のような非集約カラムを参照するのはSQLとしては文法違反であり、GROUP BY
句を用いる際は集約関数を参照することが求められることを理解させて頂いておりますが、
某プログラミングスクールの学習用電子教材には
GROUP BY句を用いる際に、「*」のような非集約カラムを参照する
というサンプル(上記の二つのサンプル)がありました。
(※サンプルは自分で一部改変したため、実際のサンプルとは若干異なります。あと、その学習用電子教材は2018年の教材なので2021年現在ではそのサンプルは陳腐化してる可能性があります。)
0