Marchan4
@Marchan4 (Marchan4)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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

1Answer

Your answer might help someone💌