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!

MySQLバージョン5.7というデータベースで、自分で作ったテーブルのカラムをGROUP BY句で同じグループとして1つのレコードにすることができない。

AtomというテキストエディタのターミナルでMySQLバージョン5.7というデータベースを起動させていただいて、

mysql> CREATE DATABASE bookstore;

という上記のコマンドでbookstoreというデータベースを作らせていただいて、

mysql> show databases;

という上記のコマンドで下記のようなデータベース一覧を表示させました。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| bookstore          |
| kadaidb            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

6 rows in set (0.01 sec)

あと

mysql> USE bookstore;

というコマンドでbookstoreというデータベースを選択させていただきました。
それからbookstoreデータベースにchaptersテーブルを作成するSQLファイル(mysql-lesson/create_table_bookstore_chapters.sql)を作成させて頂いて、

mysql> show tables;

というコマンドで

+---------------------+
| Tables_in_bookstore |
+---------------------+
|    chapters         |
+---------------------+

1 rows in set (0.01 sec)

chaptersテーブルを確認させて頂きました。

それから

mysql> INSERT INTO bookstore.chapters (number, title, book_id) VALUES (1, "MySQLとは", 1);
mysql> INSERT INTO bookstore.chapters (number, title, book_id) VALUES (2, "テーブルとは", 1);
mysql> INSERT INTO bookstore.chapters (number, title, book_id) VALUES (3, "CRUDとは", 1);
mysql> INSERT INTO bookstore.chapters (number, title, book_id) VALUES (1, "Rubyとは", 3);
mysql> INSERT INTO bookstore.chapters (number, title, book_id) VALUES (2, "変数とは", 3);
mysql> INSERT INTO bookstore.chapters (number, title, book_id) VALUES (3, "関数とは", 3);

というコマンドを入力させて頂いて、

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 |
+----+--------+--------------------+---------+---------------------+

というレコードを表示させて頂きました。

それからbooksテーブルを作らせて頂いて、

+---------------------+
| Tables_in_bookstore |
+---------------------+
| books               |
| chapters            |
+---------------------+

2 rows in set (0.00 sec)

下記のようなレコードを作成させて頂きました。

mysql> SELECT * FROM books;
+----+----------------------+-------+---------------------+
| id | title                | price | created_at          |
+----+----------------------+-------+---------------------+
|  1 | はじめてのMySQL      |  2980 | 2021-03-08 21:50:43 |
|  2 | はじめてのRuby       |  1980 | 2021-03-08 21:56:55 |
|  3 | はじめてのHTML       |  1200 | 2021-03-08 22:03:29 |
+----+----------------------+-------+---------------------+

3 rows in set (0.00 sec)

あと、
GROUP BY句を用いて

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つのレコードにすることができませんでした。

しかし、

mysql> SELECT books.title, COUNT(*) AS number_of_chapters FROM chapters INNER JOIN books ON books.id = chapters.book_id GROUP BY book_id;

というコマンドを入力させて頂いたら、

+----------------------+--------------------+
| title                | number_of_chapters |
+----------------------+--------------------+
| はじめてのMySQL      |                  3 |
| はじめてのHTML       |                  3 |
+----------------------+--------------------+

2 rows in set (0.00 sec)

上記のレコードのように、自分で作ったテーブル(chaptersとbooks)を結合して

chaptersカラムとbooksカラムを

GROUP BY句で同じbook_idのグループとして1つのレコードにすることができました。

0

1Answer

Your answer might help someone💌