如何在SQL Server中获得最低50%的选择查询?

时间:2010-03-05 17:11:32

标签: sql-server-2008

在SQL服务器中,我可以说:

Select top 50 percent

我怎么说底部50%?

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

6 个答案:

答案 0 :(得分:20)

    SELECT * FROM
    (
        SELECT TOP 50 PERCENT *

        FROM [Table]

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

答案 1 :(得分:13)

为什么不改变排序顺序并保持TOP。那会不会完成同样的事情呢?

答案 2 :(得分:2)

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

假设你有一个order by子句但是还没有包含它,那么就使用DESC而不是ASC。

答案 3 :(得分:1)

另一种选择可能是:

Select * From (
    Select NTILE(2) Over (Order by Quantity Desc) as HalfNumber
    From Table1) as NtileTable
where HalfNumber = 1

然后,您可以根据需要动态更改数据的划分。

Check this out.

答案 4 :(得分:0)

我不知道这是否会奏效:

SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;

而且我很确定这样的事情也可以。

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

只需检查语法,因为我只是开始学习SQL而无法在不修改一百万次的情况下形成正确的查询;)

答案 5 :(得分:0)

if($('#selectAll').is(':checked')){
    $(nRow).find(':input[name=group_select_components]').iCheck('check');
}

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

另一方面,这很好用

SELECT * FROM (
        SELECT TOP 50 PERCENT *
        FROM [Table]
        ORDER BY [Field] DESC
   )
ORDER BY [Field] ASC

为mingos upvote:)

downvote for user151323 :(