reponの勉強メモ

主に勉強したことのメモです。

SELECT文でGROUP BYを使う時、SELECT句でカラムにAS句の別名をつけるなら、GROUP BY句でも別名を付ける

MySQLを使っていて、LaravelのO/RマッパーでSELECT文を呼び出した際、表題のエラーが出ました。

toSql() でSQL文を取り出し、MySQLの対話環境でUnknown column 'hogehoge' in 'group statement' とエラーが出てくれたのでわかりました。

これはダメ

select id, name, DATE_FORMAT(date_column, "%Y-%m-%d") AS date, SUM(point) AS amount from employee GROUP BY DATE_FORMAT(date_column, "%Y-%m-%d") ORDER BY DATE_FORMAT(date_column, "%Y-%m-%d");

これでOK

select id, name, DATE_FORMAT(date_column, "%Y-%m-%d") AS date, SUM(point) AS amount from employee GROUP BY date ORDER BY DATE_FORMAT(date_column, "%Y-%m-%d");

GROUP BY 句は別名を付けたらその別名を使わなければいけない。ORDER BY 句は別名でなくても大丈夫。

Laravel の O/R マッパーだと

DB::table('employee')->groupBy('date')->selectRaw('id, name, DATE_FORMAT(date_column, "%Y-%m-%d") AS date, SUM(point) AS amount')->get()