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