Mysql-分组按条件统计

    现在有数据表,保存消息信息,包括消息类型,阅读状态,推送时间等字段,如附件图片。需求是要根据消息类型分组,找出每组最后推送时间,最后推送的消息标题,以及是否有未读信息,未读信息的数量等内容。

    获取每种消息类型下最后一条消息pusher_time和msg_title我使用了先将消息倒序排列,外层sql根据消息类型进行分组的方法。统计当前消息类型下是否有未读消息,我是先将所有消息的is_read状态concat,然后判断concat的字符串中是否包含有0(is_read 未读状态),如果有说明这种类型下有未读的消息。统计每种类型下的未读消息数量了使用了COUNT(CASE  WHEN t.is_read = 0 THEN t.msg_type END) AS unReadMsgCount,其中msg_type是消息类型,根据此字段分组。

 

最终sql:

SELECT t.* , 
CASE FIND_IN_SET('0', GROUP_CONCAT(is_read)) WHEN 0 THEN 0 ELSE 1 END AS hasUnRead, 
COUNT(CASE  WHEN t.is_read = 0 THEN t.msg_type END) AS unReadMsgCount 
FROM ( 
    SELECT id, push_time, msg_type, is_read, msg_title FROM table_name WHERE user_id = ***** 
    ORDER BY push_time DESC ) t 
GROUP BY msg_type ORDER BY msg_type ASC

 

825fcd2cb5c9c11675f1ec7a85a770f917e.jpg

 

Refer:

1、https://blog.csdn.net/veloi/article/details/62238155

转载于:https://my.oschina.net/guquanxin/blog/1928283

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值