質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

725閲覧

chaptersカラムをGROUP BY句で同じbook_idのグループとして1つのレコードにしたい。

Marchan4

総合スコア15

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/03/09 12:53

編集2022/01/12 10:55

下記のレコードが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年現在ではそのサンプルは陳腐化してる可能性があります。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/03/09 12:57

結局、質問内容は何でしょうか?
Marchan4

2021/03/09 14:20 編集

質問文を読んでいただければわかるのですが、 以下の二つのサンプルを表示させて頂きたいのですが。 ``` 一つ目のサンプル 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 *, 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 | +----+--------+-------------+---------+---------------------+----------+ ```
maisumakun

2021/03/09 13:17

最後の方に「理解させて頂いておりますが」とある部分で納得しているのだと思っていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問