2013-04-23 64 views
0

我们正在使用ORACLE,并且需要从表中获取一个随机行,以满足特定的条件。我搜索了一下,发现这个例子可能对此有用。 但是,据我了解,Sample返回整个表的指定大小的随机子集。 因此,在我们的例子中,因为我们需要匹配特定WHERE条件的行,所以即使表中包含该过滤器的行,查询也可能不会返回任何行。Oracle SAMPLE是否与筛选器一起工作?

SELECT柱FROM (SELECT FROM表样品柱(10)其中COLUMN = 'ABC') WHERE ROWNUM = 1

在上面的查询,如果10%的样本集不包含与任何行列'abc'它会返回空结果(即使90%可能包含这样的行)

任何建议来纠正这种行为?

+0

你可能想看看[这个问题](http://stackoverflow.com/q/16024737/409172)。 'SAMPLE'并不总是按预期工作。你可能想在Alex的答案中使用'rownumber'方法,以确保你总是得到一个随机的行。 – 2013-04-23 18:51:01

+0

不知道这里有什么问题...列='abc'可能是7%,而不是10.这就是为什么你在结果中为空。 – Art 2013-04-23 19:13:25

回答

2

试试这个:

WITH data AS (SELECT column FROM table WHERE COLUMN='abc') 
SELECT column FROM data SAMPLE(10) 
WHERE rownum = 1 
相关问题