基礎からのmysqlを読んでいます。
tb1でtosiの大きいものからの順位をつけるのが目的です。
tb1 +------+--------+------+ | bang | nama | tosi | +------+--------+------+ | A101 | 佐藤 | 40 | | A102 | 高橋 | 28 | | A103 | 中川 | 20 | | A104 | 渡辺 | 23 | | A105 | 西沢 | 35 | +------+--------+------+
select a.nama,a.tosi,count(*) from tb1 as a join tb1 as b where a.tosi <= b.tosi group by a.bang;
と本に記載通り入力したところ
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db1.a.nama' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
と言うエラーが出てきてしまいます。翻訳を見てもなぜエラーになるのかがわかりません。
これは何が原因でコードをどうすればいいのでしょうか?また#1とはどういう意味なのでしょうか?
それとcount(*)で表示される数字がそのまま順位になるとの記載があったのですがa.tosi <= b.tosiだと逆になってしまうのではないのでしょうか?
a +------+--------+------+ | bang | nama | tosi | +------+--------+------+ | A101 | 佐藤 | 40 | | A102 | 高橋 | 28 | | A103 | 中川 | 20 | | A104 | 渡辺 | 23 | | A105 | 西沢 | 35 | +------+--------+------+ b +------+--------+------+ | bang | nama | tosi | +------+--------+------+ | A105 | 西沢 | 35 | | A105 | 西沢 | 35 | | A105 | 西沢 | 35 | | A105 | 西沢 | 35| | A105 | 西沢 | 35 | +------+--------+------+
西沢の例ですと、となるのでa.tosi <= b.tosiだとcountは4になり、順位が2にならないきがするのですが。
MySQLのバージョンは5.7以上ではありませんか?
5.7だと仕様がかわったのでしょうか?
GROUP BYの可能な条件が厳密になりました。
以前はこの命令文でもエラーにはならなかったのでしょうか?
「MySQLのバージョンは5.7以上ではありませんか? 」の質問の答えは?
バージョンは5.7.20を使っています
回答3件
あなたの回答
tips
プレビュー