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句に入れないといけないようだ。
から、`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;