永远不要写出 "select *,sum() from"这个样子的sql!
sql中如果使用了聚合函数,那么查询的非聚合字段,都要放在group by 后面,以确保每个组都只会有唯一的一行,像这样
"select a ,b,sum(c) from t group by a,b"
老版本的mysql默认没做这个严格限制,是不符合sql标准的,查出来记录是随机的,这就是个错误的数据,其他数据库要按你这么查都会报错的。
看你这个sql,应该是想查每个人总分最高的时候,各科的分数分别是多少吧。
在mysql8.0以上,可以使用开窗函数
select * from (select *,row_number()over(partition by 姓名 order by 科目1分数+科目2分数+科目3分数 desc) rn ) t where t.rn=1;
如果是老版本的话,则只能先算出每人的最高分,再根据姓名和最高分两个条件去匹配原表中的数据,当然,如果出现最高分同分的情况,你还得再给个规则取某一条
sql没有问题,发一下你的表结构和数据吧,应该是数据有问题。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!