按不同列值Group By并Pivot:请求类型分组统计问题
解决按Request Type和Action分组统计的问题
核心思路
要实现所有Request Type与指定Action(endorsed、approved、issued)的完整统计,关键是先生成两者的全部组合,再关联原始数据统计,避免因原始数据缺失导致的记录遗漏。
用SQL实现的方案
假设你的原始数据表名为requests,包含request_type和action两个字段,可通过以下SQL完成统计:
-- 生成所有Request Type与目标Action的完整组合 WITH all_combinations AS ( SELECT DISTINCT rt.request_type, a.action FROM (SELECT DISTINCT request_type FROM requests) rt -- 枚举需要统计的三个Action CROSS JOIN ( SELECT 'endorsed' AS action UNION ALL SELECT 'approved' UNION ALL SELECT 'issued' ) a ) -- 关联原始数据并统计数量 SELECT ac.request_type, ac.action, COUNT(r.request_type) AS count FROM all_combinations ac LEFT JOIN requests r ON ac.request_type = r.request_type AND ac.action = r.action GROUP BY ac.request_type, ac.action ORDER BY ac.request_type, ac.action;
逻辑说明
CROSS JOIN生成每个Request Type与三个Action的所有可能组合,确保没有遗漏的配对;LEFT JOIN保留所有组合记录,即使原始表中没有对应的数据;COUNT(r.request_type)会将未匹配到的记录统计为0,而非直接忽略。
用Excel实现的方案
如果用Excel处理,可按以下步骤操作:
- 第一步:提取原始表中所有唯一的
Request Type到一列(比如A列),将三个Action(endorsed、approved、issued)作为表头放在第一行(比如B1、C1、D1); - 第二步:在B2单元格输入公式
=COUNTIFS(原始数据!$A:$A, $A2, 原始数据!$B:$B, B$1),按回车后填充整个表格,缺失的配对会自动显示0。
内容的提问来源于stack exchange,提问作者Robert John Catequista
相关产品推荐
相关产品推荐

