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

 

posted @ 2021-05-18 16:38  ssc在路上  阅读(125)  评论(0编辑  收藏  举报