如何在不使用Top子句的情况下选择T-SQL中的Top%?

Myt*_*hul 1 t-sql sql-server

如何在不使用Top子句的情况下从表中选择Top 40%(或者Top百分比,赋值有点模糊)?这个问题适用于T-SQL,SQL Server 2008.我不允许使用Top作为我的作业.

谢谢.

这是我尝试过但看起来很复杂的东西.是不是有更简单的方法?

select top (convert (int, (select round (0.4*COUNT(*), 0) from MyTable))) * from MyTable
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

试试这个NTILE功能:

;WITH YourCTE AS
(
    SELECT 
        (some columns),
        percentile = NTILE(10) OVER(ORDER BY SomeColumn DESC)
    FROM
        dbo.YourTable
)
SELECT *
FROM YourCTE
WHERE percentile <= 4
Run Code Online (Sandbox Code Playgroud)

NTILE(10) OVER(....)会为您的数据创建10组百分比 - 因此,前40%是组no.该结果的1,2,3,4


SQL*_*ace 5

使用NTILE

CREATE TABLE  #temp(StudentID CHAR(3),  Score  INT)

INSERT #temp  VALUES('S1',75 )
INSERT #temp  VALUES('S2',83)
INSERT #temp  VALUES('S3',91)
INSERT #temp  VALUES('S4',83)
INSERT #temp  VALUES('S5',93 )
INSERT #temp  VALUES('S6',75 )
INSERT #temp  VALUES('S7',83)
INSERT #temp  VALUES('S8',91)
INSERT #temp  VALUES('S9',83)
INSERT #temp  VALUES('S10',93 )

SELECT * FROM (
SELECT NTILE(10) OVER(ORDER BY Score) AS NtileValue,*
FROM #temp) x
WHERE NtileValue <= 4
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

有趣的是我今天在博客上谈到了NTILE:有没有人使用NTILE()窗口函数?