mysql中如何将数据库表中的一列数字进行随机分成4个组

mysql中如何将数据库表中的一列数字进行随机分成4个组,第1张

可以用Floor与Rand函数嵌套表达式为每行记录生成1-4之间的随机数,然后以该随机数对记录行排序,这样就可将该列数随机分成四组了。当然表的记录行数不能太少,否则无法保证至少有4个组。

请参考下列sql实现语句:

这里假设表名为t1,字段名为num

select t from

(select Floor(4 Rand()+1) as GroupName,

num from t1) t order by tGroupName;

sql语句:select from table_name where id=round(rand()10) order by id desc limit 0,6

注:可以根据你id值的范围调节where条件中随机数值的范围。

这是最简单的方式,不过这个方法可能存在一个问题,就是产生的随机数可能重复,比如随机数出现2次或多次数字3,这样结果中就会有重复的记录。通过sql语句本身如何解决这个问题暂时没想到,这样就只能用另一种方法:先在程序中生成6个不重复的随机数(具体 *** 作比如每个随机数生成出来保存之前先跟之前的所有数比较一下,不重复才保存,重复就重新生成一个),然后再生成sql语句:select from table_name where id in (1,2,3,4,5,6) order by id desc ;

我这里给你一个  类似的例子,   表结构也就是简单的   分类,  明细

要查询每个分类下面,   随机明细  几条的情况

你可以参考参考

测试表与测试数据。

CREATE TABLE test_order_by_rand (group_code varchar(10), name varchar(10));

INSERT INTO test_order_by_rand VALUES('水果', '苹果');

INSERT INTO test_order_by_rand VALUES('水果', '梨子');

INSERT INTO test_order_by_rand VALUES('水果', '香蕉');

INSERT INTO test_order_by_rand VALUES('水果', '桃子');

INSERT INTO test_order_by_rand VALUES('水果', '菠萝');

INSERT INTO test_order_by_rand VALUES('蔬菜', '萝卜');

INSERT INTO test_order_by_rand VALUES('蔬菜', '白菜');

INSERT INTO test_order_by_rand VALUES('蔬菜', '蘑菇');

INSERT INTO test_order_by_rand VALUES('蔬菜', '毛豆');

INSERT INTO test_order_by_rand VALUES('蔬菜', '青椒');

INSERT INTO test_order_by_rand VALUES('坚果', '核桃');

INSERT INTO test_order_by_rand VALUES('坚果', '榛子');

INSERT INTO test_order_by_rand VALUES('坚果', '杏仁');

INSERT INTO test_order_by_rand VALUES('坚果', '花生');

INSERT INTO test_order_by_rand VALUES('坚果', '开心果');

预期目标, 按照 group_code 进行分组, 每个分组内, 进行随机获取数据SELECT

  group_code,

  name

FROM

(

SELECT

  CASE 

    WHEN @cn != group_code THEN @rownum:= 1 

    ELSE @rownum:= @rownum + 1  

    END AS No,

  group_code,

  @cn := group_code AS group_code,

  name

FROM

  (SELECT @rownum:=0) r,

  (SELECT @cn:= '') p,

  (SELECT  FROM test_order_by_rand order by group_code, rand()) tmp

)  subQuery

WHERE

  No <= 3

ORDER BY

  group_code;

  

  

这里套了2层子查询, 其中的

(SELECT  FROM test_order_by_rand order by group_code, rand()) tmp  

用于实现, 针对每一个  group_code 进行分组, 下属的 name 的数据, 进行随机排序

其中的

()  subQuery

用于实现, 针对 前面的 按 group_code 分组, name 随机排序后的数据。

模拟一个  row_number() over(partition by group_code) 的处理

最后的 No <= 3 用于限制, 每一个 group_code 下面, 显示多少行

执行结果:

+------------+--------+

| group_code | name   |

+------------+--------+

| 水果       | 苹果   |

| 水果       | 香蕉   |

| 水果       | 梨子   |

| 蔬菜       | 青椒   |

| 蔬菜       | 白菜   |

| 蔬菜       | 蘑菇   |

| 坚果       | 核桃   |

| 坚果       | 花生   |

| 坚果       | 开心果 |

+------------+--------+

9 rows in set (000 sec)

sql排序的规则是,按照第一个字段的顺序正序或倒序排列,

当第一个字段是相同的,那么会按照第二个字段的正序或倒序排列

依次类推,如果后面没有排序字段,会随机排列

所以,按照第一个字段倒序,按照第二个字段正序排列,结果视觉显示全部到序,原因可能是

第一个字段并无相同的,且第一个字段和第二个排序字段数值的增减是成反比的。

以上就是关于mysql中如何将数据库表中的一列数字进行随机分成4个组全部的内容,包括:mysql中如何将数据库表中的一列数字进行随机分成4个组、mysql语句既要从大到小排列,又要随机获取怎么做的有谁遇到过吗、mysql数据库中随机抽取该分类下的几条数据怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9313835.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存