如何在SQL中将count查询分为10组

问题描述

我当前正在使用MysqL,必须将数据分为10组。

例如,如果数据总数为90,则应为

 1~9,10~18,19~27,28~36,37~45,46~54,55~63,64~72,73~81,82~90. 
     

如果数据总数为100,则应为

 1~10,11~20,21~30,31~40,41~50,51~60,61~70,71~80,81~90,91~100.

谁能给我一个将数据分成10组的线索。我使用了rownum,但是没有用。...

select total.row_num,total.name,total.reg,total.id,total.motspd
        from(
            select
                (@row_num:=@row_num+1) AS row_num,cg.group_name as name,td.reg_date as reg,td.car_id as id,td.mcu_motspd as motspd
            from
                cartracker.tracker_data td
            left join car c on (c.car_device_no = td.car_id)
            left join car_group cg on (c.car_group_no = cg.car_group_no)
            where cg.car_group_no = "1"
            group by DATE_FORMAT(td.reg_date,"%Y%M%d%h%m")
            )total

这是查询的结果,但是它显示错误的行号。我希望row_num从0到数据的结束号。但是,在图中,它从44,713开始。谁能帮我修复从0到数据结束号的行号。 attached image

解决方法

我要回答标题中的问题:

我当前正在使用mysql,必须将数据分为10组。

这正是功能ntile()的作用。所以:

select t.*,ntile(10) over (order by <whatever>) as tile
from t;

我不知道查询与这个问题有什么关系。

,

在重新编辑之前,还没有意识到要用动态表操作OP,但这不是砍刀,尽管需要很多时间来处理。用OP表名切换a并首先创建行号。

DECLARE @TotalNum INT;
DECLARE @Num INT;
DECLARE @NUm2 INT;
DECLARE @COUNTS INT;

SET @COUNTS = (select count(rownum) from a)/10
SET @TotalNum = 10 
SET @Num =1
SET @Num2 =0     

WHILE @Num <= @TotalNum  
BEGIN    

  update a 
  set a.flag = @Num
  where a.rownum >= (@COUNTS)*@NUM2+1 and a.rownum <= @NUM*(@COUNTS)
      
    SET @Num = @NUM + 1
    SET @Num2 = @NUM2 + 1
END