SQL问题:错觉之SQL

获取分组的排序数据逻辑,但是结果却不同

踩坑ing

逻辑-1

肯定会认为,先分组,后排序,乃是正常流程,要相信mysql 能得到想要的数据

select * from table where .... group by column_name order by id DESC;

以上会发现,返回数据是从小到大的数据,不符合自己的预期,pass

逻辑-2

再上面的逻辑尝试了下,并不能达到结果
尝试下一种逻辑:
使用子查询,达到先排序,后分组的逻辑,要相信mysql 能返回我要的数据

select * from (select * from table where .... order by id DESC) r group by r.column; 

这时候,奇迹发生了,有的服务器会返回正常的数据结果,但是有的服务器会返回逻辑-1 的结果。不符合自己的预期,pass

逻辑-3

通过查询资料,mysql 会对子查询进行优化,所以数据并不是准确的。

select * from (select * from table where .... order by id DESC limit 9999) r group by r.column;

通过 limit 语句限制,mysql 不要进行优化,则可以正常返回数据,但是加了limit 看着不舒服,

逻辑-4

虽然逻辑-3可以完成条件,但是limit 9999 还是限制数据,只能换一种方法
使用 MAX 进行强制获取最大的 id,再通过id ,进行数据获取

select * from table where id in (select max(column) from table where ... group by column)

这样就可以成功返回数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值