如何在不使用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)
试试这个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
使用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()窗口函数?