zoukankan      html  css  js  c++  java
  • 记录一次统计需求中的sql编写

      在工作中有一个统计的功能,其实也是比较简单的一个统计功能,就是统计一个已发布文章数量和未发布文章数量,具体我们怎么进行区分呢,那就是这条数据的目前所处的状态,比如:state=4(已发布文章),state=1,2,3,5,那就是未发布文章数量,就是这么一个简单的需求

    一、错误想法汇总

    1、从sql入手

      首先想到的是从sql入手,但是我发现我没有办法在where条件中同时满足两种情况,于是我想到了union,我把两种情况union all一下,这不就是把两种情况组合起来了吗,顺着这个思路,之前也写过这种sql,很快就写出来了,如下所示:

    1 SELECT COUNT(1)  AS RELEASE_NUM
    2 FROM TABLE
    3 WHERE FLOW_STATE = '4'
    4 UNION
    5 SELECT COUNT(1)  AS TODO_RELEASE_NUM
    6 FROM TABLE
    7 WHERE FLOW_STATE IN ('1', '2', '3', '5')

    然而,并不是我想要的结果,我想要这两个字段是独立的两列。

    2、在程序中处理

    这种我想的是我写两个sql然后分别查询出结果,然后再程序中进行判断,组合,但是这样的话,我还要考虑统计项是哪些,因为统计项是变化的,工作量很大,几乎不可能完成,果断放弃了,没办法只能求助他人,哈哈

    二、正统思路

      还是从sql入手,我们来利用case when 进行判断,来统计状态不同的数据,具体sql如下:

    1 SELECT 
    2 COUNT(CASE WHEN FLOW_STATE = '4' THEN 1 END)  AS RELEASE_NUM,
    3 COUNT(CASE WHEN FLOW_STATE IN ('1', '2', '3', '5') THEN 1 END)  AS TODO_RELEASE_NUM
    4 FROM TABLE

    注意:这边的group by 还有where条件 还有一些表关联都去掉了,只是看重这种写sql的方法

  • 相关阅读:
    mybatis两种方式
    js绑定下拉框数据源
    修改 Idea 终端 Terminal 为 GitBash
    git stash使用
    解决百度网盘容量不符,没存进东西但容量变小的问题
    key_load_public: invalid format
    排序算法
    SpringBoot---自动配置原理
    mysql系列——Explain关键字(十)
    mysql系列——开启慢查询日志(十一)
  • 原文地址:https://www.cnblogs.com/ssh-html/p/14781617.html
Copyright © 2011-2022 走看看