首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SQL RAND()生成约束的不同元素

用SQL RAND()生成约束的不同元素
EN

Stack Overflow用户
提问于 2013-01-16 23:51:28
回答 1查看 198关注 0票数 2

我有一个SQL (MySQL SQL)语句,如下所示,可以从表bar中获取10条记录

代码语言:javascript
复制
SET @foo:=1;
SELECT DISTINCT
    @start:=ROUND(RAND()*100),
    @start+ROUND(RAND()*100)+1,
    CONCAT("id-",@foo:=@foo+1)
FROM
    bar
LIMIT 10

它生成独特的元素,如:

代码语言:javascript
复制
...
14   72   id-2
...
9    10   id-8
...

到现在为止还好。但是我真正想做的是使用DISTINCT关键字,这样就不会根据第一列或第一列和第二列值的唯一性来添加重复项。

例如,目前所有10条记录都是唯一的,因为每个记录的id-n元素总是不同的。所以这是有可能的:

代码语言:javascript
复制
...
9    10   id-4
...
9    10   id-8
...

我想做的是不让第二个9 10 id-8元素出现在结果集中(或者,或者,9 10 id-4 -我不在乎遗漏了哪些近似重复的元素)。是否有一种将DISTINCT约束为第一列或第二列的方法?

我知道我可以省略SQL语句中的id-n值,然后用下游脚本对结果进行后处理,这些脚本会将结果添加回SQL语句中。然而,出于好奇,我希望找到SQL查询中包含的解决方案。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-01-17 00:40:09

嗯,我不是百分之百确定这就是你想要做的,但是看起来你可以把你的查询结果放在一个子查询中,然后使用MAX得到最后的记录。

也许是这样的:

代码语言:javascript
复制
SELECT rand1col, rand2col, CONCAT("id-",Max(fooidcol)) as col3
FROM 
(
    SELECT DISTINCT
        @start:=ROUND(RAND()*100) as rand1col,
        @start+ROUND(RAND()*100)+1 as rand2col, 
        @foo:=@foo+1  as fooidcol
    FROM bar
) t
GROUP BY rand1col, rand2col
LIMIT 10

测试的问题是RAND()不会返回我测试所需的内容,所以我用实际的列创建了这个SQL Fiddle,这些列试图做到这一点,但它似乎也适用于上面的查询。

下面是带有上述查询的小提琴 --在某些时候工作,只需保持刷新即可。

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

https://stackoverflow.com/questions/14370005

复制
相关文章

相似问题

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