简单case when用法

例子一:

有一个表,数据如:

mysql> select * from tid_action;

+----+------+-------------+

| id | tid  | action      |

+----+------+-------------+

|  1 |   47 | restorePost |

|  2 |   47 | restorePost |

|  3 |   47 | restorePost |

|  4 |   47 | replyTopic  |

|  5 |   47 | replyTopic  |

|  6 |   47 | deletePost  |

|  7 |   48 | replyTopic  |

|  8 |   48 | replyTopic  |

|  9 |   48 | restorePost |

| 10 |   48 | deletePost  |

| 11 |   48 | deletePost  |

| 12 |   48 | deletePost  |

| 13 |   48 | restorePost |

+----+------+-------------+

13 rows in set (0.01 sec)

 

现在要按tid 分组统计,每个tid的action类型replyTopic  、restorePost 、deletePost  分别有多少行。

sql语句:

SELECT tid,
  sum(CASE WHEN ACTION='replyTopic' THEN 1 ELSE 0 END ) replyCount,
  sum(CASE WHEN ACTION='restorePost' THEN 1 ELSE 0 END ) restoreCount,
  sum(CASE WHEN ACTION='deletePost' THEN 1 ELSE 0 END ) deleteCount
FROM tid_action
GROUP BY tid

 

 

查询结果:

+------+------------+--------------+-------------+

| tid  | replyCount | restoreCount | deleteCount |

+------+------------+--------------+-------------+

|   47 |          2 |            3 |           1 |

|   48 |          2 |            2 |           3 |

+------+------------+--------------+-------------+

2 rows in set (0.00 sec)

 

 

例子二:

有一个bbs7_activity_item表,主要字段如下,activityitemid是主键,STATUS=1表示审核通过的状态。



 

现在想创建一个新表,来统计总的人数和审核通过的人数,按照tid分组,简单写法:

 

CREATE TABLE activity_signUp_censored AS 
SELECT tid,sum(persons) signUpCount,
sum(CASE WHEN STATUS = 1 THEN persons ELSE 0 END) censoredCount
FROM bbs7_activity_item GROUP BY tid

 经验证,这个sql是正确的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值