首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组后的随机数据

分组后的随机数据
EN

Stack Overflow用户
提问于 2014-06-17 05:49:52
回答 3查看 44关注 0票数 0

我想在分组后随机化我的数据。我怎样才能以优雅的方式做到这一点呢?

这里我创建了SQLFiddle演示

预期结果

金,金2,金3,银3,银,青铜

金2,金3,金,银,银3,青铜

金,金3,金2,银,银3,青铜

青铜、银3、银、金2、金、金3等。

简而言之,应该先按字母顺序(名称)对它们进行分组,然后在内部随机分组数据

我试过了

按名称从type顺序选择* RAND()

这是按名字排序的,但不是随机的。

type组中通过RAND()按名称顺序选择*

这将数据随机化,但不分组。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-17 06:17:03

使用substring_index(col, ' ', 1)将字符串值拆分为单个空格分隔符,并获得第一个令牌,并将其用作您的一阶条件。在您的二阶标准中,使用rand(),以便具有相同首单词的名称被随机化。

代码语言:javascript
复制
select name
from type
order by substring_index(name, ' ', 1), rand()

这里的假设是您的name列上的单词总是以单个空格分隔。

编辑

下面是关于substring_index的更多示例

代码语言:javascript
复制
select substring_index('hello world', ' ', 1); -- 'hello'
select substring_index('hello', ' ', 1); -- 'hello'
select substring_index('hello_world foo', ' ', 1); -- 'hello_world'
select substring_index('yippie ki yay', ' ', 2); -- 'yippie ki'
票数 2
EN

Stack Overflow用户

发布于 2014-06-17 06:14:47

尝试这样做,如果您知道要订购的substr中的最大字符,那么name将提高性能:

代码语言:javascript
复制
SELECT * FROM type ORDER BY substr(name,1,4), rand();

在@gerrytan上面的答案中,使用substring_index来实现现实生活中所期望的结果。

SQLFiddle演示

票数 1
EN

Stack Overflow用户

发布于 2014-06-17 06:16:08

试一试

代码语言:javascript
复制
SELECT * FROM `type` ORDER BY `name`, `name` RLIKE '^.[:num]+$', RAND();

SQL DEMO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24256572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档