美文网首页
Mysql对字段进行分段统计

Mysql对字段进行分段统计

作者: 暖夏未眠丶 | 来源:发表于2018-01-24 17:01 被阅读60次

    摘要: 最近做手机银行营销名单时,需对评分(pf)和开户率(khl)进行二维统计 评分和开户率需进行分段统计。本文采用ceil函数和case语句两种方法。

    最近做手机银行营销名单时,需对评分(pf)和开户率(khl)进行二维统计

    评分和开户率需进行分段统计。

    其中,评分取值范围:[0,100],开户率取值范围:[0,1]

    以下为测试数据:

    --测试数据--检查表是否存在,若存在则删除DROPTABLEIFEXISTSyingxiao;--创建测试表:yingxiaoCREATETABLEyingxiao(namevarchar(10)NOTNULL,pfdouble(10,2)NOTNULL,khldouble(10,2)NOTNULL,PRIMARYKEY(name));--插入测试数据                      INSERTINTOyingxiaoVALUES('a','15','0.15');INSERTINTOyingxiaoVALUES('b','25','0.25');INSERTINTOyingxiaoVALUES('c','35','0.35');INSERTINTOyingxiaoVALUES('d','40','0.4');INSERTINTOyingxiaoVALUES('e','45','0.45');INSERTINTOyingxiaoVALUES('f','55','0.55');INSERTINTOyingxiaoVALUES('g','65','0.65');INSERTINTOyingxiaoVALUES('h','54','0.66');INSERTINTOyingxiaoVALUES('i','75','0.75');INSERTINTOyingxiaoVALUES('j','85','0.85');INSERTINTOyingxiaoVALUES('k','95','0.95');

    一、1个字段分段统计

    1、方法一:ceil函数

    函数名: ceil

    用    法:double ceil(double x);

    功   能:返回大于或者等于指定表达式的最小整数

    说  明:float ceil ( float value )返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。

    百度关于ceil函数的介绍:https://baike.baidu.com/item/ceil/10931457

    select(ceil(pf/20)-1)*20asmin,ceil(pf/20)*20asmax,count(*)fromyingxiaogroupbyceil(pf/20);

    评分字段分段统计结果:

    [0,20]:1

    (20,40]:3

    (40,60]:3

    (60,80]:2

    (80,100]:2

    实际上,在统计分组中习惯规定:“上组限不在内”,即:a≤x

    2、方法二:case语句

    结构:case  when… then …end

    SELECTsum(CASEwhenpf<20then1else0end)AS'[0,20)',sum(CASEwhenpf>20andpf<=40then1else0end)AS'[20,40)',sum(CASEwhenpf>40andpf<=60then1else0end)AS'[40,60)',sum(CASEwhenpf>60andpf<=80then1else0end)AS'[60,80)',sum(CASEwhenpf>80then1else0end)AS'[80,100]'FROMyingxiao;

    二、两个字段分段统计

    对评分和开户率两个字段进行分组统计,形成二维交叉表,可将上面方法交叉使用。

    select(ceil(khl*100/20)-1)*0.2askhl_min,ceil(khl*100/20)*0.2askhl_max,sum(CASEwhenpf>=0andpf<=20then1else0end)AS'pf[0,20]',sum(CASEwhenpf>=20andpf<40then1else0end)AS'pf[20,40)',sum(CASEwhenpf>=40andpf<60then1else0end)AS'pf[40,60)',sum(CASEwhenpf>=60andpf<80then1else0end)AS'pf[60,80)',sum(CASEwhenpf>=80andpf<=100then1else0end)AS'pf[80,100]',count(*)AS'pf合计'FROMyingxiaogroupbyceil(khl*100/20);

    原文地址:

    数据小雄博客:http://www.zhangzhengxiong.com/?id=97

    版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

    原文链接

    相关文章

      网友评论

          本文标题:Mysql对字段进行分段统计

          本文链接:https://www.haomeiwen.com/subject/wrwuaxtx.html