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的方法

  • 相关阅读:
    每天一个linux命令:top命令
    docker入门实战笔记
    Linux top里面%CPU和us%的解释
    mac开发环境配置
    TCP/IP及内核参数优化调优
    在C#中使用代理的方式触发事件(转,这篇应该是最好的)
    如何在Vista IIS 7 中用 vs2005 调试 Web 项目? (转)
    C#接口慨述
    asp跟asp.net的区别
    解耦的故事(一)tmfc的开关(转)
  • 原文地址:https://www.cnblogs.com/ssh-html/p/14781617.html
Copyright © 2011-2022 走看看