Slide 22
Slide 22 text
違いポイント7:部分指定DISTINCT
古のMySQLでは DISTINCT ON と似た動作をするものとして、このように書けました。
(name, phone, email は良きに計らってくれる)
こんなに違うよ MySQLとPostgreSQL
db=# SELECT DISTINCT ON (user_id)
-# user_id, name, phone, email
-# FROM sales;
db=# SELECT user_id, MAX(name), MAX(phone), MAX(email)
-# FROM sales
-# GROUP BY user_id;
mysql> SELECT user_id, name, phone, email
-> FROM sales
-> GROUP BY user_id;
SQLの動作としては、滅茶苦茶超絶スーパーウルトラ イケてなかったので、
MySQL 5.7 からはデフォルト動作では なくなりました! ヤッター
(互換性のために SQL_MODE の ONLY_FULL_GROUP_BY でウルトライケてない
動作に変更することはできます)
※余談: イケてない動作の時の「良きに計らいかた」通りの結果を得るために MAX()の代
わりに ANY_VALUE() という集約関数が追加されました
こう書こう
チョットむかしばなし