5.7.26 - MySQL Community Server (GPL) です。
出てくるエラーは
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column '*****.calendar.date' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
sql_modeで、ONLY_FULL_GROUP_BYを未指定にして解決しましたが、ONLY_FULL_GROUP_BYを未指定にすると何かデメリットがあるでしょうか?
教えて下さい。
###追記
質問としてはSQL文をどう直せばいいのかではなく、ONLY_FULL_GROUP_BYを未指定にするデメリットについてですが。。
(全く同じものを、MySQLのバージョンも同じ5.7.26の本件とは別のレンタルサーバーに置いて(ONLY_FULL_GROUP_BYを自分でいじれない)もエラーを吐かないことから、そっちはONLY_FULL_GROUP_BYがデフォルトで未指定になっていると思われるので、大したデメリットはないのでは?と思いますが・・・)
MySQL
1CREATE TABLE `calendar` ( 2 `date` date NOT NULL, 3 `working` smallint(5) UNSIGNED NOT NULL COMMENT '0=稼働日 1=休日 2=法定休日', 4 `fixed` int(11) DEFAULT NULL COMMENT '1=加工済み NULL=未加工, 5 `done` int(11) DEFAULT NULL COMMENT '1=処理済み NULL=未処理' 6) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 8 9SELECT DATE_FORMAT(`date`, '%Y%m') as `ym`,DATE_FORMAT(`date`, '%Y') as `y`,DATE_FORMAT(`date`, '%m') as `m`,`date` from `calendar` WHERE `done` IS NULL group by DATE_FORMAT(`date`, '%Y%m')
######補足
table crender は、1日につき1レコードの行で、日数分存在します。
休日か稼働日かの予定と、その日の分のデータが処理済みかどうかを判別するためのものです。
このテーブルへのINSERT処理は1日から末日までまとめて行われます。
(歯抜けにはならない)
本件SQL文で意図するところは、「その月のカレンダーが生成済みかの判別」です。