SQL Server 2008 介绍大家一个有趣的函数NTILE

孤独加百列 2012-10-16 04:27:31
通常有这样的需求,需要将数据按照某一字段分组,比如按成绩排列,将前25%为优秀,25%到50%有良好,50%到75%为差,75%到100%为不及格的情况。像这样需要将一个有序整体按照一定的比例划分数据的情况下,直接使用NTILE函数可以起到事半功倍的效果。NTILE(num)Num为要等分的数量





--NTILE分类函数
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
DROP TABLE tba
END
GO
CREATE TABLE tba
(
ID INT IDENTITY(1,1) NOT NULL,
Total INT
)
GO
INSERT INTO tba
SELECT '100' UNION
SELECT '101' UNION
SELECT '102' UNION
SELECT '103' UNION
SELECT '104' UNION
SELECT '105' UNION
SELECT '106' UNION
SELECT '107' UNION
SELECT '108' UNION
SELECT '109' UNION
SELECT '110'
GO
SELECT ID,
Total,
CASE NTILE(4) OVER (ORDER BY Total DESC)
WHEN 1 THEN '25%'
WHEN 2 THEN '25%-50%'
WHEN 3 THEN '50%-75%'
WHEN 4 THEN '75%-100%' END AS Level
FROM tba

/*
ID Total Level
11 110 25%
10 109 25%
9 108 25%
8 107 25%-50%
7 106 25%-50%
6 105 25%-50%
5 104 50%-75%
4 103 50%-75%
3 102 50%-75%
2 101 75%-100%
1 100 75%-100%
*/

这样比直接用SQL语句写要方便得多。
...全文
491 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
BJBJING 2012-12-05
  • 打赏
  • 举报
回复
没明白LZ是啥意思呢?
woof_1128 2012-10-17
  • 打赏
  • 举报
回复
受教了,谢谢分享..
jide0 2012-10-17
  • 打赏
  • 举报
回复
后排坐。。。
kensouterry1 2012-10-16
  • 打赏
  • 举报
回复
谢谢分享,菜鸟多多学习
--小F-- 2012-10-16
  • 打赏
  • 举报
回复
NTILE函数很少用到 呵呵
quchen520 2012-10-16
  • 打赏
  • 举报
回复
谢谢分享
孤独加百列 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

NTILE对不知道要取多少个组的时候有点困难
[/Quote]
本来排名函数就没有万能的,这个只是把某一类的情况封装了一下下而已,复杂的还得加点逻辑进去的。
孤独加百列 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

这个排名函数我也很少用,谢谢楼主分享!
[/Quote]
我也是很少用,今天偶尔想起来了,就提醒下,呵呵。
piz2011 2012-10-16
  • 打赏
  • 举报
回复
回一个看看
夜予 2012-10-16
  • 打赏
  • 举报
回复
叶子 2012-10-16
  • 打赏
  • 举报
回复
这个排名函数我也很少用,谢谢楼主分享!
發糞塗牆 2012-10-16
  • 打赏
  • 举报
回复
NTILE对不知道要取多少个组的时候有点困难
汤姆克鲁斯 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

站板凳
[/Quote]
人品比你好点
發糞塗牆 2012-10-16
  • 打赏
  • 举报
回复
xxxx,阿汤哥不厚道
汤姆克鲁斯 2012-10-16
  • 打赏
  • 举报
回复
4个排名函数row_number用的最多
NTILE用的最少,偶尔用了都忘记怎么拼了
發糞塗牆 2012-10-16
  • 打赏
  • 举报
回复
站板凳

6,128

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧