在 SQL Server 中使用范围按百分比查找最高值

ado*_*lot 3 sql-server t-sql sql-server-2008-r2

按百分比范围对记录进行分组的更简单方法是什么。

这是我试图完成的

Select top percents between 50 and 75 * from myTable order by PKI
Run Code Online (Sandbox Code Playgroud)

这是我这样做的方式,但我觉得它云要容易得多

select 
    top(25) percent 
     *
from myTable
where id not in (
            select 
                top(25) percent 
                 ID
            from myTable
            order by PKI
            )
order by PKI
Run Code Online (Sandbox Code Playgroud)

这应该是我表的前 50-75% 吗?

有没有更好(更好)的方法来做到这一点。

Mar*_*ith 6

另一种方法是

WITH CTE
     AS (SELECT ID,
                PKI,
                ROW_NUMBER() OVER ( ORDER BY PKI) AS RN,
                COUNT(*) OVER()                   AS Cnt
         FROM   myTable)
SELECT ID,
       PKI
FROM   CTE
WHERE  RN BETWEEN 0.5 * Cnt AND 0.75 * Cnt 
Run Code Online (Sandbox Code Playgroud)


ype*_*eᵀᴹ 6

另一种方法是使用NTILE()函数:

WITH cte AS
  ( SELECT id,
           pki,
           NTILE(4) OVER(ORDER BY pki) AS quartile
    FROM  myTable
  )
SELECT id,
       pki
FROM  cte
WHERE quartile = 3 ;
Run Code Online (Sandbox Code Playgroud)