能否用单条SQL查询统计全部患病用户及未读用户数量?
单条SQL实现总患病用户数与未读用户数统计
当然可以用单条SQL完成这两个统计,不需要拆分两条查询,也没必要用事务包裹。
你可以通过条件聚合的方式,在一次查询中同时计算总数和未读数量,示例SQL如下:
SELECT COUNT(id) AS total_ill_users, SUM(CASE WHEN read = false THEN 1 ELSE 0 END) AS unread_ill_users FROM users_ill;
或者用COUNT结合条件判断的写法,效果一致:
SELECT COUNT(id) AS total_ill_users, COUNT(CASE WHEN read = false THEN id END) AS unread_ill_users FROM users_ill;
为什么不需要事务?
单条SQL查询本身就是原子操作,会基于数据库的同一数据快照计算两个统计值,能保证总数和未读数的一致性。如果拆成两条查询,万一在两次查询之间有数据变更(比如新增患病用户、修改read字段状态),两次结果可能会出现不匹配的情况,反而不如单条查询可靠。
内容的提问来源于stack exchange,提问作者mastermaster11
相关产品推荐
相关产品推荐

