2010-03-05 89 views
1

在SQL服务器,我可以说:如何获得SQL服务器中选择查询的底部50%?

Select top 50 percent 

我怎么能说下50%?

编辑 - 一个有趣的问题的缘故,如果我们假设他有一个主键的表,但希望下50%上升主键顺序排列。什么是实现这一目标的最有效方式?

回答

11

为什么不只是改变排序顺序,并保持TOP。这不会完成同样的事情吗?

17
SELECT * FROM 
    (
     SELECT TOP 50 PERCENT * 

     FROM [Table] 

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

滑稽你有没有信用提供解决方案,它返回下半部分的原始排序顺序+1从我 – mjv 2010-03-05 17:21:35

+0

+1提供解决方案扩展我在*之前添加的问题* :-) – Cruachan 2010-03-05 17:23:43

+0

50分钟后:哇!答案弥补了时间浪费;-),现在有7名代表现在......很好地“付费”。有趣的是看到这一切的动态。 – mjv 2010-03-05 18:13:34

1

如说你的问题在技术上是没有意义的,因为如果没有BY子句中返回的数据是不确定的(实际上大多数的数据库将在主键顺序返回,或订单的,如果你没有一个然后在插入顺序,但不能保证)

假设然而,你有一个命令的条款,但只是没有包括它,只会使用DESC而不是ASC。

0

我不知道这是否会工作:

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

而且我敢肯定,这样的事情就太OK:

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

只是检查语法,因为我才刚刚开始学习SQL和如果不先修改一万次,不能形成正确的查询;)

1

另一种选择可能是:

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

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

Check this out.

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

当表包含的记录的不均匀量不正常运行的。中间的那个将在两个结果集中。

这在另一方面正常工作

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

给予好评的mingos :)

downvote为user151323 :(