MySQL统计同一字段不同状态的数据量

MySQL统计同一字段不同状态的数据量


例:统计一个表中 用户总数,以及 状态=0,状态=1,状态=2,状态=3,状态=1或者=2的用户数量:

查询语句:

SELECT
	COUNT(1) totalCount,
	SUM(CASE WHEN u.`status` = 0 THEN 1 ELSE 0 END) zeroCount,
	SUM(CASE WHEN u.`status` = 1 THEN 1 ELSE 0 END) oneCount,
	SUM(CASE WHEN u.`status` = 2 THEN 1 ELSE 0 END) twoCount,
	SUM(CASE WHEN u.`status` = 3 THEN 1 ELSE 0 END) threeCount,
	SUM(CASE WHEN u.`status` = 1 or u.`status` = 2 THEN 1 ELSE 0 END) oneOrTwoCount
FROM
	kd_user u;

查询结果:
在这里插入图片描述

说明:

  1. SUM() 函数就是对每个状态的总数进行统计;
  2. CASE WHEN u.status = 0 THEN 1 ELSE 0 END: 这段意思就是当状态等于0时,sum+1,否则sum+0,当前这条结束;

再来个开发过程中稍微复杂一点的:

需求:查询满足条件的用户里 每一个用户发布的不同类型的文章数量

mybatis-plus中的查询:

    <select id="ContentCount" resultType="ContentCountDTO">
        SELECT
         a.user_id,
         SUM(CASE WHEN a.`type` = 1 THEN 1 ELSE 0 END) ugc_count,
         SUM(CASE WHEN a.`type` = 2 THEN 1 ELSE 0 END) pgc_count
        FROM kd_article a
        WHERE a.status = 2
        AND a.user_id IN
        <foreach collection="userIds" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
        GROUP BY a.user_id
    </select>

说明:查询每一个满足条件的用户,就in满足条件的用户id,然后以用户id作为分组查询,不同的状态就去sum不同的type,很容易理解;

猜你喜欢

转载自blog.csdn.net/weixin_44958006/article/details/121245622