SQL 查询来自不同区域的选择行

Posted

技术标签:

【中文标题】SQL 查询来自不同区域的选择行【英文标题】:SQL query for select rows from different regions of range 【发布时间】:2014-10-28 22:21:39 【问题描述】:

我有一个带有实体的表 entities,它具有唯一索引 entity_id

例如,1

我想做一个 sql 查询,选择:

如果 entity_id 如果 200 如果 400 3 个或更少的随机实体,如果 600 3 个或更少的随机实体,如果 800

所以,我想要一个查询并从实体范围的每个区域获取实体。一个或多个区域为空也没关系

我不知道如何实现它。

请帮忙

【问题讨论】:

您可以考虑使用UNION 你自己尝试过什么吗? *** 不是“请为我编写代码”网站。 Max,是的,我有。更多问题? 【参考方案1】:

您可以编写一个返回表的函数,并在该函数中首先定义一个包含所需列的表,例如:

DECLARE @ReturnTable TABLE (entity_id INT, column2 INT, etc.)

然后,声明另一个与实体相同但具有随机数列的表。

DECLARE @EntitiesCopy TABLE (entity_id INT, rand INT);

像这样填充@EntitiesCopy 表:

INSERT INTO @EntitiesCopy SELECT *, RAND() FROM entities

然后,编写如下插入语句:

INSERT INTO @ReturnTable(column1, column2) 
     SELECT TOP 3 * FROM @EntitiesCopy 
       WHERE (entity_id > 1) AND (entity_id < 200) 
       ORDER BY rand

同样,对于其他条件。

那么,

RETURN @ReturnTable

【讨论】:

似乎使用 UNION 的解决方案具有更好的性能。不过谢谢【参考方案2】:

我只会使用 UNION

select * from entities where entity_id between 2 and 199 order by rand() limit 3
UNION
select * from entities where entity_id between 200 and 399 order by rand() limit 3
UNION
select * from entities where entity_id between 400 and 599 order by rand() limit 3
UNION
select * from entities where entity_id between 500 and 799 order by rand() limit 3
UNION
select * from entities where entity_id between 700 and 999 order by rand() limit 3;

假设,当您说 1

【讨论】:

嗯,我相信存在更好的解决方案

以上是关于SQL 查询来自不同区域的选择行的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询 - 选择不同的类别并计数

用dataframe重写sql查询;如何从选择中混合不同的来源

SQL按多列以不同顺序排序后选择奇数行

在 SQL 查询中使用来自 __TABLES_SUMMARY__ 的 table_id 来选择表

SQL查询返回从数组中选择作者的数据[重复]

从 Sql 中的表中选择不同的日期间隔