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

如何合并单用户与全用户年度月度统计查询结果至同一表格?

合并单用户与全用户月度统计数据

可以用条件聚合的方式,把两个查询的逻辑合并到一条SQL语句中,直接生成你需要的三列结果,无需额外关联两次查询的结果,效率更高:

SELECT 
    MONTH(date) AS month,
    COUNT(CASE WHEN userid = 'x' THEN 1 END) AS user,
    COUNT(*) AS all
FROM DB_NAME
WHERE YEAR(date) = YEAR(CURDATE())
GROUP BY month
ORDER BY month;

逻辑说明:

  • COUNT(CASE WHEN userid = 'x' THEN 1 END):仅统计用户x的记录,不满足条件时CASE返回NULL,COUNT会自动忽略NULL值,最终得到该用户的月度计数
  • COUNT(*):统计所有符合年份条件的记录,得到全用户的月度计数
  • GROUP BY month:按月份分组,和原查询逻辑保持一致
  • ORDER BY month:保证结果按月份顺序排列,属于可选优化但更符合展示需求

如果需要确保全年1-12月都有记录(即使某个月无数据也显示0),可以结合生成月份表的方式实现:

WITH months AS (
    SELECT 1 AS month UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL
    SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL
    SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL
    SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
)
SELECT 
    m.month,
    COUNT(CASE WHEN d.userid = 'x' THEN 1 END) AS user,
    COUNT(d.date) AS all
FROM months m
LEFT JOIN DB_NAME d 
    ON MONTH(d.date) = m.month AND YEAR(d.date) = YEAR(CURDATE())
GROUP BY m.month
ORDER BY m.month;

这个版本会返回全年12个月份的统计结果,无数据的月份user和all列将显示0,结果更完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:01:12