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

如何用MySQL+PHP高效生成特定格式的分类统计报表?

高效生成组合统计报表的方法

当然有更简洁高效的查询方式!不用再逐个执行查询,你可以用**条件聚合(Conditional Aggregation)**一次性搞定所有统计需求,只需要扫描一次数据表就能返回所有需要的组合统计值。

核心思路

通过CASE WHEN语句针对每个你需要的性别+婚姻状态组合做筛选,再用COUNT()(或者SUM())聚合这些条件匹配的记录,最后按ULB和Category分组,就能直接得到每个地区、每个类别下的所有统计项。

示例SQL查询

假设你的表名为population_data,替换成你实际的表名即可:

SELECT
    ULB,
    Category,
    -- 已婚女性
    COUNT(CASE WHEN Gender = 'F' AND MaritialStatus = 'Married' THEN 1 END) AS F_M,
    -- 离异女性
    COUNT(CASE WHEN Gender = 'F' AND MaritialStatus = 'Divorcee' THEN 1 END) AS F_D,
    -- 未婚女性
    COUNT(CASE WHEN Gender = 'F' AND MaritialStatus = 'Unmarried' THEN 1 END) AS F_UM,
    -- 丧偶女性
    COUNT(CASE WHEN Gender = 'F' AND MaritialStatus = 'Widow' THEN 1 END) AS F_W,
    -- 已婚男性
    COUNT(CASE WHEN Gender = 'M' AND MaritialStatus = 'Married' THEN 1 END) AS M_M,
    -- 离异男性
    COUNT(CASE WHEN Gender = 'M' AND MaritialStatus = 'Divorcee' THEN 1 END) AS M_D,
    -- 未婚男性
    COUNT(CASE WHEN Gender = 'M' AND MaritialStatus = 'Unmarried' THEN 1 END) AS M_UM,
    -- 丧偶男性
    COUNT(CASE WHEN Gender = 'M' AND MaritialStatus = 'Widow' THEN 1 END) AS M_W,
    -- 可选:每个分组的总人数
    COUNT(*) AS Total
FROM
    population_data
GROUP BY
    ULB,
    Category
ORDER BY
    ULB,
    Category;

为什么这方法更好?

  • 性能更优:只需要扫描一次数据表,比多次单独查询节省大量IO和数据库资源,尤其是数据量较大时效果明显
  • 结果更规整:直接返回所有统计字段在同一行,不需要手动合并多个查询的结果
  • 扩展性强:如果以后需要新增其他性别+婚姻状态的组合,只需要添加一行CASE WHEN的聚合列即可

灵活调整

  • 如果需要按ULB汇总所有类别的数据,只需要把GROUP BY改成GROUP BY ULB
  • 如果需要全局统计(不按地区和类别分组),直接去掉GROUP BY语句即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:34:07