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 查询来自不同区域的选择行的主要内容,如果未能解决你的问题,请参考以下文章
用dataframe重写sql查询;如何从选择中混合不同的来源