🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
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

2回答

757閲覧

MySQLバージョン5.7というデータベースで、自分で作ったテーブルのカラムをGROUP BY句で同じグループとして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 05:47

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句で同じグループとして1つのレコードにすることができました。

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

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

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

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

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

yambejp

2021/03/09 06:24

回答者が指示した作業を、質問者が指示通りしたなら 「させていただく」という表現もギリありかもしれませんが、 質問者が自主的に作業したものを「させていただく」は 違和感があります。
guest

回答2

0

エラーメッセージを確認すれば殆どが解決できます。

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

google翻訳すると以下です。

エラー1055(42000):SELECTリストの式#1がGROUP BY句になく、nが含まれています onaggregated column'bookstore.chapters.id 'これは機能的に列に依存していません ■GROUPBY句内。これはsql_mode = only_full_group_byと互換性がありません

で、「SELECTリストの式#1がGROUP BY句になく、nが含まれています」というので何となく、selectの項目とgroup by の項目が合っていないのだろうという事が分かります。

エラーコードだけで検索しても、解決の糸口は見つかります。
ERROR 1055 (42000)で検索

投稿2021/03/09 06:54

編集2021/03/09 06:57
sazi

総合スコア25327

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

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

0

SELECT * FROM chapters GROUP BY book_id;

GROUP BYは集約関数といっしょにご利用ください
「*」のように非集約カラムを参照するのはSQLとしては文法違反です

投稿2021/03/09 06:20

yambejp

総合スコア116690

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問