在一个问答系统中,业务中统计后的数据如下表(这里定为answer_copy_count吧):
意思是:每个问题(question_id)下面的有很多答案,每个答案(answer_id)有被复制的次数(copy_count)。
现在想求的是,每个问题下面复制数最大的答案。
我的sql语句为:
SELECT question_id,answer_id,MAX(copy_count) AS max_copy_count From answer_copy_count GROUP BY question_id;
可是查询结果是:
什么鬼? 第二行的answer_Id不是应该为4么?怎么是3 ????
说明:上面的语句之前会报错,报“SELECT list is not in GROUP BY clause and contains nonaggregated column...”,我修改了配置文件,把only_full_group_by干掉了。现在不报错了,可是数据跟预期的不一样啊?
手册说是除了聚合函数外,查询的其他字段也必须出现在group by 里面,像这样:
SELECT question_id,answer_id,MAX(copy_count) AS max_copy_count FROM answer_copy_count GROUP BY question_id,answer_id;
可是这样有毛用,跟原表得到的数据一样。。。。
请大神指点一下。
分享个不一样的解决方案吧(仅支持mysql8.0版本及以上),窗口函数,row_number和rank的区别
相同复制数仅取其中一个
相同复制数全部显示