最近帮朋友解决一个问题,需求是这样的:
在查询某表数据时需要根据表中某列进行分组且每组取前指定条数的数据,然后根据某列(id)进行排序
在网上找了很多资料,都是可以实现但是效率很慢,经过探讨写出了下面的查询SQL,十万条数据执行耗时在1秒以内(约0.8秒)
SET @codeum := ‘’;
SET @csum := 0;
SELECT * from
(
SELECT si_a.*,
IF(@codeum <> si_a.分组列名 , @csum := 0 , (@csum := @csum + 1) ) AS icount ,
IF(@codeum = si_a.分组列名 , @codeum := si_a.分组列名 ,@codeum := si_a.分组列名) as codes
FROM 表名 si_a ORDER BY si_a.分组列名,排序列名 DESC
)
si_b where si_b.icount < 指定条数
记录一下