首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从数据库表中选择4个大小相等的结果集

如何从数据库表中选择4个大小相等的结果集
EN

Stack Overflow用户
提问于 2015-01-15 19:07:39
回答 2查看 253关注 0票数 3

我有一个SQL Server数据库表,它有很多行。我正在使用一个程序,它使用该表作为数据源。程序本身不支持多线程,所以我必须运行程序的多个实例,对于每个实例,我需要说明要处理的整个基本数据的哪一部分。

我一直在使用这个语句将我的基本数据(表中的数据)分割成两个大小相等的结果集:

代码语言:javascript
复制
SELECT TOP 50 PERCENT * 
FROM MyTable 
ORDER BY MyField ASC

因此,这将选择前50%的数据。然后,我使用以下语句返回另一半:

代码语言:javascript
复制
SELECT TOP 50 PERCENT * 
FROM MyTable 
ORDER BY MyField DESC

但我不知道如何选择,比如说,25%的块。我试过像这样

代码语言:javascript
复制
SELECT * 
FROM MyTable 
WHERE MyField NOT IN (SELECT TOP 50 PERCENT * 
                      FROM MyTable 
                      ORDER BY MyField DESC) 
  AND MyField NOT IN (SELECT TOP 25 PERCENT * 
                      FROM MyTable 
                      ORDER BY MyField ASC) 
ORDER BY MyField ASC

因此,它将返回所有其他东西,但不是前25%或最后50%。换句话说,它将返回25%到50%之间的数据。你明白我的意思。

我在本地机器(在连接到SQL数据库的Visual中)尝试了这一点,并且运行良好,但是当我在测试环境中实现这一点时,我得到了以下错误

当子查询未引入EXISTS时,只能在select列表中指定一个表达式。

在这种情况下,我真的不知道这意味着什么。这些SELECT TOP 50 PERCENT语句在测试环境中也能很好地工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-15 19:14:56

您应该查看NTILE窗口函数--它将一组行划分为块(任意数量的行--由您决定),并允许您轻松地选择所需的行:

代码语言:javascript
复制
WITH ChunkedData AS
(
    SELECT 
        Chunk = NTILE(4) OVER (ORDER BY MyField ASC),
        * 
    FROM MyTable 
)
SELECT *
FROM ChunkedData
WHERE Chunk = 1

使用NTILE(4)窗口函数,基本上可以将所有行标记为1、2、3或4-4几乎相等的数据块。选一个你需要的

当然,如果你需要,你可以使用其他数量的块- NTILE(10)给你10个大小相等的块-你的选择。

票数 6
EN

Stack Overflow用户

发布于 2015-01-15 20:17:14

当您编写像column_name 'in‘或'not in’这样的条件时,子查询应该只返回一列作为比较的结果。在子查询中,您将返回所有列,因此无法进行比较。请尝试以下查询

代码语言:javascript
复制
SELECT * 
FROM MyTable 
WHERE MyField NOT IN (SELECT TOP 50 PERCENT MyField 
                  FROM MyTable 
                  ORDER BY MyField DESC) 
AND MyField NOT IN (SELECT TOP 25 PERCENT MyField 
                  FROM MyTable 
                  ORDER BY MyField ASC) 
ORDER BY MyField ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27971082

复制
相关文章

相似问题

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