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

如何以Laravel方式合并用户提问数与回答数的统计查询并输出统一结果?

如何合并用户提问与回答数量的统计结果?

嘿,我来帮你搞定这个合并统计的需求!你已经有了分别统计提问和回答数量的查询,现在要把它们合并成一个统一输出,这里给你两种实用的方案,按需选择就行:

方案1:合并统计并区分提问/回答类型

如果你想在结果里明确区分每条记录是提问数还是回答数,可以用UNION ALL把两个统计结果合并,同时新增一个类型字段标记:

SELECT 
    userid,
    '提问' AS type,
    count AS num
FROM (
    SELECT tb_addquestion.userid, COUNT(*) AS count 
    FROM tb_addquestion 
    LEFT JOIN tb_user ON tb_user.userid = tb_addquestion.userid 
    GROUP BY tb_addquestion.userid 
    HAVING count > 0 AND count < 15
) AS question_counts
UNION ALL
SELECT 
    userid,
    '回答' AS type,
    count AS num
FROM (
    SELECT tb_answer.userid, COUNT(*) AS count 
    FROM tb_answer 
    LEFT JOIN tb_user ON tb_user.userid = tb_answer.userid 
    GROUP BY tb_answer.userid 
    HAVING count > 0 AND count < 15
) AS answer_counts;

注意:UNION ALL会保留所有符合条件的记录,比UNION更高效(因为不会去重),如果你的场景不需要去重就用它。

方案2:同一行展示用户的提问数和回答数

要是你想让每位用户的提问数和回答数在同一行显示,那就用左连接把两个统计结果关联起来,还可以用COALESCE把NULL值转换成0(避免没有提问/回答的用户显示空值):

SELECT 
    u.userid,
    COALESCE(q.count, 0) AS question_count,
    COALESCE(a.count, 0) AS answer_count
FROM tb_user u
LEFT JOIN (
    SELECT userid, COUNT(*) AS count 
    FROM tb_addquestion 
    GROUP BY userid 
    HAVING count > 0 AND count < 15
) q ON u.userid = q.userid
LEFT JOIN (
    SELECT userid, COUNT(*) AS count 
    FROM tb_answer 
    GROUP BY userid 
    HAVING count > 0 AND count < 15
) a ON u.userid = a.userid
WHERE q.count IS NOT NULL OR a.count IS NOT NULL; -- 只保留有提问或回答的用户

这里我把原查询里的LEFT JOIN tb_user移到了外层,这样能确保所有用户都被考虑到,同时通过WHERE过滤掉既没有提问也没有回答的用户,和你原查询的逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:02:48