首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL选择行的示例

SQL选择行的示例
EN

Stack Overflow用户
提问于 2010-06-20 18:52:29
回答 4查看 7.8K关注 0票数 4

我需要从集合中选择样本行。例如,如果我的select查询返回x行,那么如果x大于50,我希望只返回50行,但不只是前50行,而是均匀分布在结果集上的50行。本例中的表格记录了路线- GPS位置+ DateTime。我在DateTime上订购,需要一个合理的纬度和经度值的样本。提前感谢SQL Server 2008

EN

回答 4

Stack Overflow用户

发布于 2010-06-20 19:00:23

若要在SQL Server中获取示例行,请使用以下查询:

代码语言:javascript
复制
SELECT TOP 50 * FROM Table
ORDER BY NEWID();

如果希望每第n行(在本例中为第10行)获取,请尝试执行以下查询:

代码语言:javascript
复制
SELECT * From 
(
  SELECT  *, (Dense_Rank() OVER (ORDER BY Column ASC)) AS Rank 
  FROM Table
) AS Ranking 
WHERE Rank % 10 = 0; 

Source

在这里可以找到更多查询为其他流行的关系型数据库选择随机行的示例:http://www.petefreitag.com/item/466.cfm

票数 3
EN

Stack Overflow用户

发布于 2010-06-20 19:00:32

每第n行得到50:

代码语言:javascript
复制
SELECT *
FROM table
WHERE row_number() over() MOD (SELECT Count(*) FROM table) / 50 == 0
FETCH FIRST 50 ROWS ONLY

如果你想要一个随机样本,那就听从吉米·基恩的回答。

更新:关于它在MS SQL上运行的要求,我认为应该改为这样(虽然没有MS SQL Server可供测试):

代码语言:javascript
复制
  SELECT TOP 50 *
   FROM (
     SELECT t.*, row_number() over() AS rn, (SELECT count(*) FROM table) / 50 AS step
     FROM table t
   )
   WHERE rn % step == 0
票数 3
EN

Stack Overflow用户

发布于 2010-06-20 18:54:46

我建议您在选择时将一个计算列添加到作为随机数获得的结果集中,然后选择按该列排序的前50个列。这会给你一个随机的样本。

例如:

代码语言:javascript
复制
SELECT TOP 50 *, RAND(Id) AS Random
FROM SourceData
ORDER BY Random

其中SourceData是源数据表或视图。顺便说一句,这里假设使用SQL Server 2008上的T-SQL。它还假设您的数据源上有一个Id列,该列具有唯一的Id。如果您的it是非常小的数字,在将其传递给RAND之前,最好将其乘以一个大整数,如下所示:

代码语言:javascript
复制
RAND(Id * 10000000)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3078964

复制
相关文章

相似问题

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