博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
decode、sign、case在统计中的用法:
阅读量:4320 次
发布时间:2019-06-06

本文共 4585 字,大约阅读时间需要 15 分钟。

参考网址:

说明:

在统计中用到的MAX聚集函数也可以用sum、min、avg等其他聚集函数替代。用sign和decode来完成比较字段大小来区某个字段

1 select decode(sign(字段1-字段2),-1,字段3,字段4) from dual;

1、使用case进行直方图的统计:

统计工资在各个区间的人数:

1 SELECT SUM(CASE 2              WHEN t.sal < 1000 THEN 3               1 4              ELSE 5               0 6            END) "小于1000", 7        SUM(CASE 8              WHEN t.sal >= 1000 AND t.sal < 2000 THEN 9               110              ELSE11               012            END) "1000-2000",13        SUM(CASE14              WHEN t.sal >= 2000 AND t.sal < 3000 THEN15               116              ELSE17               018            END) "2000-3000",19        20        SUM(CASE21              WHEN t.sal >= 3000 AND t.sal < 4000 THEN22               123              ELSE24               025            END) "3000-4000",26        SUM(CASE27              WHEN t.sal >= 4000 THEN28               129              ELSE30               031            END) "大于4000"32   FROM emp t

结果:

统计在这个区间具体的人:

1 SELECT SUM(CASE 2              WHEN t.sal < 1000 THEN 3               1 4              ELSE 5               0 6            END) "小于1000", 7        wm_concat(CASE 8                    WHEN t.sal < 1000 THEN 9                     ename10                  END) "小于1000的具体人",11        SUM(CASE12              WHEN t.sal >= 1000 AND t.sal < 2000 THEN13               114              ELSE15               016            END) "1000-2000",17        wm_concat(CASE18                    WHEN t.sal >= 1000 AND t.sal < 2000 THEN19                     ename20                  END) "1000-2000的具体人",21        SUM(CASE22              WHEN t.sal >= 2000 AND t.sal < 3000 THEN23               124              ELSE25               026            END) "2000-3000",27        wm_concat(CASE28                    WHEN t.sal >= 2000 AND t.sal < 3000 THEN29                     ename30                  END) "2000-3000的具体人",31        32        SUM(CASE33              WHEN t.sal >= 3000 AND t.sal < 4000 THEN34               135              ELSE36               037            END) "3000-4000",38        wm_concat(CASE39                    WHEN t.sal >= 3000 AND t.sal < 4000 THEN40                     ename41                  END) "3000-4000的具体人",42        SUM(CASE43              WHEN t.sal >= 4000 THEN44               145              ELSE46               047            END) "大于4000",48        wm_concat(CASE49                    WHEN t.sal >= 4000 THEN50                     ename51                  END) "大于4000的具体人"52   FROM emp t

结果:

统计成行列格式:

1 SELECT CASE 2          WHEN t.sal < 1000 THEN 3           '大于2000' 4          WHEN t.sal >= 1000 AND t.sal < 2000 THEN 5           '1000-2000' 6          WHEN t.sal >= 2000 AND t.sal < 3000 THEN 7           '2000-3000' 8          WHEN t.sal >= 3000 AND t.sal < 4000 THEN 9           '3000-4000'10          WHEN t.sal >= 4000 THEN11           '大于或等于4000'12        END "工资分布",13        COUNT(1) 数量14   FROM emp t15  GROUP BY CASE16             WHEN t.sal < 1000 THEN17              '大于2000'18             WHEN t.sal >= 1000 AND t.sal < 2000 THEN19              '1000-2000'20             WHEN t.sal >= 2000 AND t.sal < 3000 THEN21              '2000-3000'22             WHEN t.sal >= 3000 AND t.sal < 4000 THEN23              '3000-4000'24             WHEN t.sal >= 4000 THEN25              '大于或等于4000'26           END

也可以将第一组的case进行列转行得到如下的结果:

1 WITH t AS 2  (SELECT SUM(CASE 3                WHEN t.sal < 1000 THEN 4                 1 5                ELSE 6                 0 7              END) a, 8           9          SUM(CASE10                WHEN t.sal >= 1000 AND t.sal < 2000 THEN11                 112                ELSE13                 014              END) b,15          SUM(CASE16                WHEN t.sal >= 2000 AND t.sal < 3000 THEN17                 118                ELSE19                 020              END) c,21          22          SUM(CASE23                WHEN t.sal >= 3000 AND t.sal < 4000 THEN24                 125                ELSE26                 027              END) d,28          SUM(CASE29                WHEN t.sal >= 4000 THEN30                 131                ELSE32                 033              END) e34     FROM emp t)35 SELECT '小于1000',36        t.a37   FROM t38 UNION ALL39 SELECT '1000-2000',40        t.b41   FROM t42 UNION ALL43 SELECT '2000-3000',44        t.c45   FROM t46 UNION ALL47 SELECT '3000-4000',48        t.d49   FROM t50 UNION ALL51 SELECT '大于4000',52        t.e53   FROM t

也可以进行列转行:

使用SIGN进行统计:

SIGN函数的说明:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

转载于:https://www.cnblogs.com/caroline/archive/2012/11/11/2765074.html

你可能感兴趣的文章
四. k8s--pod控制器
查看>>
一. python数据结构与算法
查看>>
django模型内部类meta解释
查看>>
v-for(:key)绑定index、id、key的区别
查看>>
el-tree文本内容过多显示不完全问题(解决)
查看>>
el-table翻页序号不从1开始(已解决)
查看>>
vue-cil 打包爬坑(解决)
查看>>
定位问题 vue+element-ui+easyui(兼容性)
查看>>
四叶草(css)
查看>>
nginx——前端服务环境
查看>>
vue+element-ui 字体自适应不同屏幕
查看>>
Vue 循环为选中的li列表添加效果
查看>>
vue创建脚手架 cil
查看>>
ArcGIS分支版本化( Branch Versioning )技术介绍
查看>>
scrapy过滤重复数据和增量爬取
查看>>
scrapy-redis源码浅析
查看>>
tupian
查看>>
selenium定位非select下拉框的元素 ,定位不到
查看>>
用elasticsearch分析中国大学省份分布
查看>>
elasticsearch 常用查询 + 删除索引
查看>>