• 记录一次统计需求中的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的方法

  • 相关阅读:
    微信开发返回验证来源方式代码
    Yii 开发过程 tips
    PHP 搜索分词实现代码
    PHP 中文字符串截取
    Ubuntu16.04设置静态ip
    Linux(Ubuntu18.04)安装Chrome浏览器
    ubuntu18.04安装redis
    ubuntu18.04虚拟机安装docker
    虚拟机安装ssh,关闭防火墙
    面试送命题,你为什么从上家公司离职?(面试题总结大全)
  • 原文地址:https://www.cnblogs.com/ssh-html/p/14781617.html
Copyright © 2020-2023  润新知