You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两条SQL SELECT语句 实现按用户分组展示不同status_id统计值

解决方法

你可以通过条件聚合的写法替代UNION拼接查询,即可实现同一用户只展示一行,不同status_id的计数作为独立列展示的需求:

SELECT 
    users.id AS user_id,
    users.name,
    COUNT(CASE WHEN post_status.status_id = 2 THEN asigns.user_id END) AS status_2_count,
    COUNT(CASE WHEN post_status.status_id = 3 THEN asigns.user_id END) AS status_3_count
FROM asigns 
LEFT JOIN post_status 
    ON asigns.post_id = post_status.post_id 
RIGHT JOIN users 
    ON asigns.user_id = users.id 
WHERE post_status.status_id IN (2, 3)
GROUP BY users.id, users.name

逻辑说明

  • 原查询用UNION拼接的两条语句返回的行status_id值不同,因此不会被UNION自动去重,才会出现同一用户重复展示的问题
  • 新写法先通过WHERE筛选出仅需要统计的status_id=2和3的记录,缩小计算范围
  • 利用CASE语句在COUNT聚合时仅统计对应状态的有效记录,分别生成两个状态的独立计数字段
  • 仅需一次GROUP BY按用户聚合,即可得到最终的单行用户统计结果

如果需要保留所有用户(哪怕两个状态的计数都为0),直接删除WHERE子句即可,没有对应状态的用户计数会自动返回0。


内容的提问来源于stack exchange,提问作者rksh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:15:00