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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Q&A

解決済

1回答

3987閲覧

SQLの構文にてエラーメッセージが出るが、解決方法がわからない

bonzya-

総合スコア8

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

0グッド

0クリップ

投稿2018/05/14 02:15

編集2018/05/14 02:34

前提・実現したいこと

テーブル内にある一部項目の4月分データを出したい
SQLの構文を作成したところ、以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'inquiry.table_a.item' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

該当のソースコード

SELECT table_a.item, category, table_b.inquiry FROM table_b JOIN table_a ON table_a.inquiry = table_b.inquiry WHERE created_at BETWEEN '2018-04-01' and '2018-04-30' GROUP BY inquiry

試したこと

原因をネットで調べてみたが、よくわからず。。
SQLの構文チェックも行ったが、問題なしと表示されました(Congrats! SQL looks fine.)

補足情報(FW/ツールのバージョンなど)

Fire Foxを使用

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

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

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

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

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

guest

回答1

0

ベストアンサー

mysqlのバージョン書いてないですが、ここらへんが原因かも??

Group by に、selectするカラムをすべて書かないといけないかもしれない


リンク先のページの説明と、mysqlのバージョンは違うようですが、原因は同じかと思います。

sql_mode=only_full_group_by

は、mysqlの設定で、

「group by を使った場合に非集約(group by に書いてない)カラムはseleteできない」

ということなので、

つまり

〇 select a,b,c from test group by a,b,c

は、実行できるが、

✕ select a,b,c from test group by a

は実行できない

ということです。

phpMyAdmin内で、その設定を変える方法があるような気がしますが(ちょっと記憶がおぼろげです・・)
mysqlの設定そのものを変更できるのであれば、そちらを変えてしまう方法もあります。

あとは、group by のついたSQLを実行する前に、SQLでsql_modeを書き換える、という方法もあります。
(接続単位での一時的な上書きだったと思うので、都度やらないといけないので手間かも・・?)

mysqlサーバーが、レンタルサーバーだとか、レンタルサーバーでも契約がどうだとか、
で、実際に何ができるのかが変わって来ますので、どの方法がベストかは、ご自分で判断いただくのが良いかと思います。

mysql sql_mode
とか
mysql sql_mode=only_full_group_by
で調べると、詳しく書いてあるページが他にもたくさんあると思いますよ。

投稿2018/05/14 02:55

編集2018/05/14 06:53
mix-peach

総合スコア1910

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

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

bonzya-

2018/05/14 02:58

回答ありがとうございます。 バージョンの記載漏れ、失礼しました。 ■バージョン情報: 4.4.12, 使用しているバージョンは上記となります
bonzya-

2018/05/14 07:13

ご丁寧な回答ありがとうございます。 すいません、もう1個だけ質問させてください。 下記の構文の場合は問題なく表示がされるのですが、違いなど分かれば教えていただきたいです SELECT table_a.item, table_b.inquiry, staff, max(CASE WHEN ques ='0' THEN an end) as 文字 FROM table_b JOIN table_a on table_a.inquiry = table_b.inquiry WHERE created_at BETWEEN '2018-04-01' and '2018-04-30' group by inquiry お手数をおかけして申し訳ございませんが、よろしくお願いいたします。
mix-peach

2018/05/14 11:12

おや??となると、selectするカラムに「非集約カラムがあるかないか」ではなく、「集約カラムがあるかないか」の違いで、SQLが実行可否が変わっているようですねぇ・・ とすると、質問のエラーが出るSQLも、selectするカラムに、sumとか、countとか、maxとかの集約するカラムがあれば、上手く行くのかな?
bonzya-

2018/05/15 03:47

回答ありがとうございます。 試しに集約カラムを入れたらエラーの表示は出ませんでした。 とりあえずはこの方法で進めてみます。 色々とご教授いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問