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;
