order by 分组报错 shop 有三个字段 根据author 选出最大的price

要求:必须查询所有字段

 

 

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 

 

 

 

posted @ 2020-12-16 19:31  未确定  阅读(104)  评论(0编辑  收藏  举报