サイトアイコン あみだがみねのもろもろ備忘録

[MySQL] #1055エラー (ORDER BYに関するエラー)

MySQL5.5からMySQL5.7にデータを持っていったら、VIEWで以下のようなエラーが出た。

#1055 – Expression #1 of SELECT list is not in GROUP BY clause
and contains nonaggregated column ‘XXX.YYY.ZZZ’
which is not functionally dependent on columns in GROUP BY clause;
this is incomatible with sql_mode=only_full_group_by

MySQL5.7からは、ONLY_FULL_GROUP_BYがデフォルトでONになっていて、
その場合、SELECTする列は全てORDER BY句に入れないといけないようだ。


たとえば次のテーブル`test`…

から、`url`列の個数を集計して、以下のようなVIEWを作成したい


MySQL5.5では、`url`列を集計したいんだから、ORDER BY句には`url`列だけを入れておけば良かったが…

CREATE VIEW `access_count_bad` 
AS SELECT `test`.`title`,
          `test`.`url`,
          COUNT(`test`.`url`) AS `count` 
FROM `test` 
GROUP BY `test`.`url` 
ORDER BY `count` DESC;

MySQL5.7でONLY_FULL_GROUP_BYが有効だと、#1055エラーとなる。
なのでORDER BY句にはSELECT句で指定している列を全ていれてやるとOK

CREATE VIEW `access_count_correct` 
AS SELECT `test`.`title`,
          `test`.`url`,
          COUNT(`test`.`url`) AS `count` 
FROM `test` 
GROUP BY `test`.`url`, `test`.`title` 
ORDER BY `count` DESC;

このページはAMPページです。
👉元のページ(非AMPページ)を表示する
👉あみだがみねのもろもろ備忘録 TOPへ
モバイルバージョンを終了