分析函数-NTILE()

编辑
  • 文档创建者:zsh331
  • 浏览次数:2798次
  • 编辑次数:8次
  • 最近更新:Kevin-s 于 2019-06-18
  • 1. 环境

    注意事项:由于设计器内置的是 Sqlite 数据库,在使用上很多语法都不支持,请将 Sqlite 数据库文件迁移到主流数据库(MySQL、MSSQL、Oracle…)后运行。

    迁移方法: 使用第三方软件迁移内置 FRDemo 数据库到指定数据库

    本文运行环境:Microsoft SQL Server 2012 - 11.0.2100.60 (X64) 

                           Copyright (c) Microsoft Corporation

                           Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


    2. 描述

    有时我们在设计报表的过程中,可能会遇到这样的需求:将数据按照某一字段平均分组,比如一张成绩表(100人)按某一科目成绩(高低)顺序分为 4 组,将第一组-优,第二组-良,第三组-较差,第四组-不及格 的情况。像这样需要将一个有序整体按照一定的比例划分数据的情况。

    一般思路:先将成绩按照一定顺序排名后按名次平均分为 4 组,1-25 名为第一组,26-50 为第二组,51-75 为第三组,76-100 为第四组,最后给对应所在组评级。这种实现思路太过于繁琐,实现起来也较难!今天分享一个快速实现的函数【NTILE 函数】,使用它可以起到事半功倍的效果。



    2. 思路

    在数据集中用 SQL 的【NTILE (N) OVER(ORDER BY 字段)】函数处理,然后进行直接调用。

    注:NTILE(Num),Num 为要等分的组数(量)。

    语句结构:

    CASE NTILE (N) OVER (ORDER BY GRADE DESC) WHEN 1 THEN 'A' WHEN 2 THEN 'B' WHEN 3 THEN 'C' WHEN 4 THEN 'D' . . . WHEN N THEN 'X' END


    3. 示例

    3.1 准备数据

    打开 SQL Server 库中的【STSCORE】表:



    3.2 NTILE (N) 实现的 SQL

    SELECT STUDENTNO AS 学号, GRADE AS 科目, CASE NTILE (4) OVER (ORDER BY GRADE DESC) WHEN 1 THEN '优' WHEN 2 THEN '良' WHEN 3 THEN '较差' WHEN 4 THEN '不及格' END AS '级别' FROM "STSCORE" WHERE COURSE = 'Chemistry' ORDER BY STUDENTNO;

    注:case when then else end 用法请参考:CASE 用法


    3.3 效果预览

    执行 SQL 脚本,效果如下:



    附件列表


    主题: 报表应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]