SQL中GROUP BY子句使用错误导致查询结果不符预期的问题咨询
问题原因与修正方案
嘿,我马上就发现你查询语句里的问题啦!
问题出在哪?
你的GROUP BY子句里同时写了name和size——这就相当于告诉数据库:把每个唯一的name + size组合都当成一个独立分组。而你的数据表中,哪怕是同一个name下的size值也都是不同的,所以每条记录都会被单独分成一组,最终自然返回了所有原始记录,完全达不到你“按name分组取最大size”的预期。
另外,你原来的order by size desc也逻辑不通:当按name+size分组时,每个组的size都是唯一值,排序没有实际意义;而你真正需要排序的应该是每个name对应的最大size值。
正确的查询语句
你只需要按name单独分组,就能让数据库把同一个name的所有记录合并成一组,然后在组内计算最大size:
select name, max(size) from table GROUP BY name order by max(size) desc limit 1000;
如果想让排序语句更清晰,也可以给max(size)起个别名:
select name, max(size) as max_size from table GROUP BY name order by max_size desc limit 1000;
执行这个修正后的语句,就能得到你预期的结果:name1 3.16、name2 2.85、name3 2.14。
内容的提问来源于stack exchange,提问作者Kadzhaev Marat
相关产品推荐
相关产品推荐

