首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择前10行,然后随机选择其中的5行

选择前10行,然后随机选择其中的5行
EN

Stack Overflow用户
提问于 2010-12-06 19:19:26
回答 3查看 2.2K关注 0票数 4

我想选择前10行,然后随机选择他们的5行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-06 19:26:52

必须定义“前10个”,它是这个代码片段中的“某物”。这是针对SQL Server 2000+的

代码语言:javascript
运行
复制
select top 5 
    * 
from 
    (
    select top 10 * from <table>
    order by something --got to have soemthing here to define "first 10"
    ) as a
order by 
    newid()

编辑:

为什么需要在派生表中使用ORDER BY

代码语言:javascript
运行
复制
-- large row, same result with and without index/PK
CREATE TABLE #foo (bar int /*PRIMARY KEY NONCLUSTERED (bar)*/, eejit char(8000))

--create rows with value 1-10 + some others
INSERT #foo (bar) VALUES (1)
INSERT #foo (bar)  VALUES (10)
INSERT #foo (bar)  VALUES (20)
INSERT #foo (bar)  VALUES (2)
INSERT #foo (bar)  VALUES (5)
INSERT #foo (bar)  VALUES (45)
INSERT #foo (bar)  VALUES (99)
INSERT #foo (bar)  VALUES (3)
INSERT #foo (bar)  VALUES (9)
INSERT #foo (bar)  VALUES (7)
INSERT #foo (bar)  VALUES (6)
INSERT #foo (bar)  VALUES (4)
INSERT #foo (bar)  VALUES (8)

--create logical fragmentation
DELETE #foo WHERE bar IN (1, 3, 5, 7, 9)
INSERT #foo (bar) VALUES (1)
INSERT #foo (bar) VALUES (3)
INSERT #foo (bar) VALUES (5)
INSERT #foo (bar) VALUES (7)
INSERT #foo (bar) VALUES (9)

-- run this a few times, you will see values > 10
-- "first 10" surely means values between 1 and 10?
select top 5 
    * 
from 
    (
    select top 10 * from #foo
    ) as a
order by 
    newid()

-- always <= 10 because of ORDER BY
select top 5 
    * 
from 
    (
    select top 10 * from #foo
    order by bar --got to have soemthing here to define "first 10"
    ) as a
order by 
    newid()
票数 6
EN

Stack Overflow用户

发布于 2010-12-06 19:25:39

代码语言:javascript
运行
复制
select * 
from 
    (select * from table order by id limit 10) as rows  order by rand() limit 5 
票数 2
EN

Stack Overflow用户

发布于 2010-12-06 19:22:11

不确定你到底想做什么,但这可能会有帮助(在MySQL中):

代码语言:javascript
运行
复制
 SELECT col1, col2, ... FROM tablename ORDER BY RAND() LIMIT 5

使用RAND()LIMIT实现您想要的目标。

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

https://stackoverflow.com/questions/4365829

复制
相关文章

相似问题

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