Sql server 2008 如何在SQL server中获取select查询的底部50%?

Sql server 2008 如何在SQL server中获取select查询的底部50%?,sql-server-2008,Sql Server 2008,在SQL server中,我可以说: Select top 50 percent 我怎么能说最低50%呢 编辑-为了回答一个有趣的问题,如果我们假设他有一个带有主键的表,但希望底部50%按主键升序排列。实现这一点最有效的方法是什么?为什么不改变排序顺序并保持最上面的顺序呢。这难道不能完成同样的事情吗?为什么不改变排序顺序并保持顶部呢。这难道不能完成同样的事情吗?您所说的问题在技术上毫无意义,因为如果没有order by子句,返回数据的顺序实际上是未定义的,大多数数据库将以主键顺序返回,或者如果

在SQL server中,我可以说:

Select top 50 percent
我怎么能说最低50%呢


编辑-为了回答一个有趣的问题,如果我们假设他有一个带有主键的表,但希望底部50%按主键升序排列。实现这一点最有效的方法是什么?

为什么不改变排序顺序并保持最上面的顺序呢。这难道不能完成同样的事情吗?

为什么不改变排序顺序并保持顶部呢。这难道不能完成同样的事情吗?

您所说的问题在技术上毫无意义,因为如果没有order by子句,返回数据的顺序实际上是未定义的,大多数数据库将以主键顺序返回,或者如果没有主键,则以插入顺序返回,但这并不能保证

    SELECT * FROM
    (
        SELECT TOP 50 PERCENT *

        FROM [Table]

        ORDER BY [Field] DESC
   )
   ORDER BY [Field] ASC

但是,假设您有一个ORDERBY子句,但没有包含它,那么您只需要使用DESC而不是ASC

您提出的问题在技术上毫无意义,因为如果没有order by子句,返回数据的顺序实际上是未定义的,大多数数据库将以主键顺序返回,或者如果您没有主键,则以插入顺序返回,但这不能保证


但是,假设您有一个ORDERBY子句,但没有包含它,那么您只需要使用DESC而不是ASC

我不知道这是否有效:

SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;
我很确定像这样的事情也可以:

SELECT * FROM <table> WHERE (ID NOT IN (SELECT TOP 50 PERCENT ...));

只需检查语法,因为我才刚刚开始学习SQL,如果不先修改语法一百万次,就无法形成正确的查询

我不知道这是否有效:

SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;
我很确定像这样的事情也可以:

SELECT * FROM <table> WHERE (ID NOT IN (SELECT TOP 50 PERCENT ...));

只需检查语法,因为我才刚刚开始学习SQL,如果不先修改语法一百万次,就无法形成正确的查询

另一个选项可以是:

Select * From (
    Select NTILE(2) Over (Order by Quantity Desc) as HalfNumber
    From Table1) as NtileTable
where HalfNumber = 1
然后,您可以根据需要动态更改数据的划分


另一个选择是:

Select * From (
    Select NTILE(2) Over (Order by Quantity Desc) as HalfNumber
    From Table1) as NtileTable
where HalfNumber = 1
然后,您可以根据需要动态更改数据的划分

当表包含的记录数量不均匀时,无法正常工作。中间的一个将在两个结果集中。

另一方面,这也很好

SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;
投票给明戈斯:

用户151323的否决票:

当表包含的记录数量不均匀时,无法正常工作。中间的一个将在两个结果集中。

另一方面,这也很好

SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;
投票给明戈斯:


用户151323的向下投票:

有趣的是,您没有因为提供按原始排序顺序返回下半部分的解决方案而获得任何荣誉+1来自我。+1为我在完成之前添加的问题的扩展提供了解决方案:-50分钟后:哇!答案弥补了损失的时间;-,7次重复现在是。。。薪水很高。看到这一切的动态很有趣。有趣的是,你没有因为提供了按原始排序顺序返回下半部分的解决方案而获得任何荣誉+1来自我。+1为我在完成之前添加的问题的扩展提供了解决方案:-50分钟后:哇!答案弥补了损失的时间;-,7次重复现在是。。。薪水很高。看到这一切的动态很有趣。