问题描述
我当前正在使用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