MySQL中按条件count

时间:2019-08-27
本文章向大家介绍MySQL中按条件count,主要包括MySQL中按条件count使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题

产品中有个业务是定时发通知的,现有的逻辑是,只有通知数>0时,才会发通知,现在PM说要修改为无论有没有消息数,都要在定时的时间发送通知。

原SQL

SELECT count(1) as total, max(mws.id) as maxRuleStatusId, mwr.user_id as userId, mwr.id as ruleId, mwr.wx_openids as wxOpenIds from micro_warning_status mws INNER JOIN micro_warning_rule as mwr ON mws.micro_warning_rule_id = mwr.id
WHERE mwr.notice_interval = #{noticeInterval} AND mws.id > mwr.last_notice_id
group by mwr.user_id, mwr.id;

last_notice_id:表示上一次已经通知的id,mws.id > mwr.last_notice_id 表示距离上一次通知后,有多少条新的消息.

因为这个条件在where里,所以只有在定时的时间内,有新的消息时,此SQL才不会为空。

新SQL

因为PM要求无论有没有新消息数,都要进行通知。所以要修改一下SQL,新SQL如下:

      SELECT sum(if(mws.id > mwr.last_notice_id, 1, 0)) as total, max(mws.id) as maxRuleStatusId, mwr.user_id as userId, mwr.id as ruleId, mwr.wx_openids as wxOpenIds from micro_warning_status mws INNER JOIN micro_warning_rule as mwr ON mws.micro_warning_rule_id = mwr.id
      WHERE mwr.notice_interval = #{noticeInterval}
      group by mwr.user_id, mwr.id;

通过sum+if来有条件地进行count操作即可达到目的。

原文链接 大专栏  https://www.dazhuanlan.com/2019/08/16/5d560d516cde3/

原文地址:https://www.cnblogs.com/chinatrump/p/11416314.html