在SQL服务器中,我可以说:
Select top 50 percent
我怎么说底部50%?
编辑 - 为了一个有趣的问题,如果我们假设他有一个带有主键的表,但希望底部50%以升序主键顺序排序。实现这一目标的最有效方法是什么?
答案 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
然后,您可以根据需要动态更改数据的划分。
答案 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 :(