zoukankan      html  css  js  c++  java
  • COUNT()

    总览介绍
    本文涉及COUNT 、CASE WHEN 、DECODE
    介绍的关键字Oracle-COUNT
    内置函数
    复杂计数
    常规操作
    中级操作
    中级操作的反思
    高级操作
    高级操作修正版本(需要你根据自己的业务知识灵活转动)
    总结
    本文涉及COUNT 、CASE WHEN 、DECODE
    介绍的关键字Oracle-COUNT
    一下所有的操作都吧下面的这张表做为操作对象

    建表sql
    create table CUSTOMER_GROUP_MEMBER_LIST
    (
    CUSTOMER_GROUP_ID NUMBER(8) not null,
    MEMBER_MSISDN NUMBER(15) not null,
    IS_VALID NUMBER(1) default 9 not null,
    INVALID_CAUSE NUMBER(1),
    CREATE_TIME DATE,
    CREATE_OPER_ID VARCHAR2(64),
    constraint PK_GROUP_MEMBER_LIST
    primary key (CUSTOMER_GROUP_ID, MEMBER_MSISDN)
    )
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    预览信息

    内置函数
    COUNT常规用法
    SELECT COUNT(*) FROM CUSTOMER_GROUP_MEMBER_LIST
    或者可以使用
    SELECT COUNT(1) FROM CUSTOMER_GROUP_MEMBER_LIST
    在或者
    SELECT COUNT(IS_VALID) FROM CUSTOMER_GROUP_MEMBER_LIST (某个字段)
    1
    2
    3
    4
    5
    复杂计数
    常规操作
    在此之前你需要知道:count(数据库字段) 不会讲数据库字段中的数据是null的进行COUNT计算
    要求:
    统计IS_VALID 为1的数据总数
    统计IS_VALID 为0的数据总数
    统计IS_VALID为0且INVALID_CAUSE为1的数据
    统计IS_VALID为0且INVALID_CAUSE为2的数据
    统计IS_VALID为0且INVALID_CAUSE为3的数据

    SELECT * FROM
    (SELECT COUNT(1) COUNTONE FROM CUSTOMER_GROUP_MEMBER_LIST WHERE IS_VALID = 0) CASEONE,
    (SELECT COUNT(1) COUNTTWO FROM CUSTOMER_GROUP_MEMBER_LIST WHERE IS_VALID = 1) CASETWO,
    (SELECT COUNT(1) COUNTTHREE FROM CUSTOMER_GROUP_MEMBER_LIST WHERE IS_VALID = 0 AND INVALID_CAUSE = 1) CASETHREE,
    (SELECT COUNT(1) COUNTTOUR FROM CUSTOMER_GROUP_MEMBER_LIST WHERE IS_VALID = 0 AND INVALID_CAUSE = 2) CASEFOUR,
    (SELECT COUNT(1) COUNTFIVE FROM CUSTOMER_GROUP_MEMBER_LIST WHERE IS_VALID = 0 AND INVALID_CAUSE = 3) CASEFIVE
    1
    2
    3
    4
    5
    6
    展示效果

    中级操作
    在此之前你需要知道:case when的使用 类似在count函数中动态追加条件
    --简单Case函数
    CASE sex
    WHEN '1' THEN '男'
    WHEN '2' THEN '女'
    ELSE '其他' END
    --Case搜索函数
    CASE WHEN sex = '1' THEN '男'
    WHEN sex = '2' THEN '女'
    ELSE '其他' END
    1
    2
    3
    4
    5
    6
    7
    8
    9
    因此上面的可以改写为
    SELECT
    COUNT(CASE IS_VALID WHEN 0 THEN 1 ELSE NULL END) COUNTONE,
    COUNT(CASE IS_VALID WHEN 1 THEN 1 ELSE NULL END) COUNTTWO,
    COUNT(CASE IS_VALID WHEN 0 THEN CASE INVALID_CAUSE WHEN 1 THEN 1 ELSE NULL END ELSE NULL END) COUNTTHREE,
    COUNT(CASE IS_VALID WHEN 0 THEN CASE INVALID_CAUSE WHEN 2 THEN 1 ELSE NULL END ELSE NULL END) COUNTTOUR,
    COUNT(CASE IS_VALID WHEN 0 THEN CASE INVALID_CAUSE WHEN 3 THEN 1 ELSE NULL END ELSE NULL END) COUNTFIVE
    FROM CUSTOMER_GROUP_MEMBER_LIST
    1
    2
    3
    4
    5
    6
    7
    展示效果

    中级操作的反思
    内置case when的两次判断方法
    虽然比基础操作代码量有所精简,但是变得比较难理解
    如果有更加复杂的逻辑判断,会导致逻辑代码修改起来崩溃
    高级操作
    入门函数DECODE
    具体的使用介绍可以在https://jingyan.baidu.com/article/c45ad29cf08673051753e28b.html找到,简单来说就是decode对于case when做出了更多的处理,支持将制定字段进行处理之后的case when操作
    demo
    decode(sign(score-70),1,'良好',0,'良好',-1,
    1
    2
    因此进一步操作

    SELECT
    COUNT(DECODE(CGML.IS_VALID, 1, 1, NULL)) VALID_COUNT,
    COUNT(DECODE(CGML.IS_VALID, 0, 1, NULL)) INVALID_COUNT,
    COUNT(DECODE(CGML.IS_VALID || CGML.INVALID_CAUSE, 01 , 1, NULL)) FEMOBILE_COUNT,
    COUNT(DECODE(CGML.IS_VALID || CGML.INVALID_CAUSE, 02 , 1, NULL)) INCREET_COUNT,
    COUNT(DECODE(CGML.IS_VALID || CGML.INVALID_CAUSE, 03 , 1, NULL)) NOTEXIST_COUNT
    FROM CUSTOMER_GROUP_MEMBER_LIST CGML
    1
    2
    3
    4
    5
    6
    7
    查看结果,然而结果并不对 心凉了
    - 问题出现的原因


    null和数字的拼接之后的数据进行判断出问题了 01 并不是按照字符的方式进行判断的
    因此我这里对于筛选的结果再次进行了验证
    更加直观的展示结果


    转而使用字符串的方式

    高级操作修正版本(需要你根据自己的业务知识灵活转动)
    修正版本的sql
    SELECT COUNT(1) TOTAL,
    COUNT(DECODE(CGML.IS_VALID, 1, 1, NULL)) VALID_COUNT,
    COUNT(DECODE(CGML.IS_VALID, 0, 1, NULL)) INVALID_COUNT,
    COUNT(DECODE(TO_CHAR(CGML.IS_VALID || CGML.INVALID_CAUSE), '01' , 1, NULL)) FEMOBILE_COUNT,
    COUNT(DECODE(TO_CHAR(CGML.IS_VALID || CGML.INVALID_CAUSE), '02' , 1, NULL)) INCREET_COUNT,
    COUNT(DECODE(TO_CHAR(CGML.IS_VALID || CGML.INVALID_CAUSE), '03' , 1, NULL)) NOTEXIST_COUNT
    FROM CUSTOMER_GROUP_MEMBER_LIST CGML
    1
    2
    3
    4
    5
    6
    7
    sql效果展示

    总结
    骚操作可以有 但是一定要量力而行
    关键词汇 count case when decode to_char ||

  • 相关阅读:
    Lakehouse: 统一数据仓库和高级分析的新一代开放平台
    mac进入恢复模式,关闭/启动系统完整性(SIP)
    多个xcode版本并存,切换xcode版本
    pod执行指定缓存目录,多版本pod执行缓存目录被清问题
    java特殊处理String.format中的%,使用%做一次转义
    html div设置占屏幕占比高度(使用vh)
    vue+leaflet 地图相关
    vue 集成天地图
    vue iframe嵌套外部网页
    Fabric.js
  • 原文地址:https://www.cnblogs.com/wcss/p/12673816.html
Copyright © 2011-2022 走看看