order by 分组报错 shop 有三个字段 根据author 选出最大的price
1
要求:必须查询所有字段
select author,artical,max(price) FROM shop GROUP BY author
执行成功了。
但是
有些可能会失败。
解决:
1 第一步
先执行
select @@global.sql_mode
如果展示,
则是关闭了MySql依赖检测功能,如果版本低于5.8 则会默认这个
如果展示
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
则是没有关闭 MysqL5.8版本及以上默认开启的。=这种情况下。order by 有所规定。
2 第二步
判断问题之后,就是解决问题了。
一般 order by 出问题 ,应该开启检测功能。
2.1 关闭
select @@global.sql_mode; set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
在执行
select author,artical,max(price) FROM shop GROUP BY author,artical,price
2.2 不想关闭
只能更改sql 语句
(1)更改一 子查询
SELECT * FROM shop s1 where price = (select max(s2.price) FROM shop s2 WHERE s1.author = s2.author );
(2)左连接
SELECT s1.author,s1.artical,s1.price FROM shop s1 LEFT JOIN shop s2 on s1.author=s2.author and s1.price < s2.price WHERE s2.price is null