Microsoft SQL Server随机行

时间:2014-04-29 18:04:53

标签: sql sql-server

我需要从SQL Server数据库中的一组行中获取一个随机行。

这是我目前运行的查询:

SELECT TOP 1 * 
FROM
    (SELECT * FROM Flowers WHERE Color = 'Red') a 
ORDER BY NEWID()

据我了解,这应该取红色的所有鲜花。然后从其中一个选择随机花。但在我看来,它只从相当少的条目中选择,因为我经常看到同样的花。

所以现在我想知道我的查询是否不如我想的那样有效,有没有人看到它的问题?

2 个答案:

答案 0 :(得分:1)

您不必使用子查询,只需使用where子句直接从表中选择,并使用newid()进行排序。类似......

SELECT TOP 1 * 
FROM Flowers 
WHERE Color = 'Red'
ORDER BY NEWID()

答案 1 :(得分:1)

众所周知,ORDER BY NEWID()不能很好地随机化。您可以使用ORDER BY CHECKSUM(NEWID())获得更好的结果。

相关问题