TSL语言基础 > SQL基础到TS-SQL > TS-SQL语法 > SELECT查询语句 > 聚集函数

PercentRankOf    

简述
返回数据集中X排位的百分点。

返回数据集中数字的百分比。先对数据进行排序,计算指定数值value(如果没有value值,则找比value小且最接近的值)所处的排序后的位置比例。最大的是1,最小的是0
定义
PercentRankOf(Expression:TExpression;X:Real:Real[;BoolConditionExp:TExpression[;N:Integer[;MovingFirst:Bool[;CacheId:String]]]]):real
参数
名称类型说明
ExpressionTExpression数字数据类型表达式。参见多字段聚集。可在表达式前加关键字DISTINCT,表示不管该值出现了多少次,只使用每个值的唯一实例。不添加即统计所有。
Xreal排位的值
BoolConditionExpTExpression布尔型表达式,如果存在该参数,则统计内容为该表达式为真的行,否则统计所有。
Ninteger整数,如果没有N参数,则统计对象为全部,否则统计对象为满足条件的从当前行起往前总共的N条记录, 如果为负数,则为从当前起往后总共|N|行。
MovingFirstBoolean布尔型,为真表示统计内容为最近N条内符合BoolConditionExp条件的,为假表示统计内容为最近N条符合BoolConditionExp条件的。省略的时候具体默认值由SelectOpt来决定,参见:SELECTOPT(Options)
CacheIdString字符串型,缓存标识串,参见:SQL时间序列统计缓存标志与性能加速
返回realReal
  • 算法

    1)对数组进行排序;
    2)计算指定数值X所处的排序后的位置比例。即小于X的值的个数/(总个数-1);
    3)X值不存在数据集中则使用线性插值法得到;
    范例


    范例1:一维数组中
    x := array(10,6,2,1,9);
    return vselect PercentRankOf(thisrow,2) from x end;//结果是0.25

    范例2:二维数组中,忽略空值
    Table1 := Array(
    ('A':2,'B':3,'C':7),
    ('A':10,'B':1,'C':5),
    ('B':1,'C':5),
    ('A':6,'B':8,'C':4) );
    Return VSelect PercentRankOf( [ 'A' ] ,6) from Table1 end; //结果是0.5


    注意:PercentRankOf 可只用于数字列。空值将被忽略。
    该模型只适用于计算指定值在序列中的排名,不适用于批量计算每个值的排名百分位,大量排名计算时可参考:
    FAQ:Q:计算序列中每个值的排位百分点的效率问题
相关