基于priority_list与priority_list_delete表的多维度统计查询需求
嘿,我来帮你搞定这个查询!你已经完成了大部分需求,现在只需要把priority_list_delete按类别分组的计数整合到单行结果里就行啦。
因为要把分组结果塞进单行,我们可以用聚合函数把分组数据转换成结构化格式(比如JSON),这样就能和其他统计值共存。下面是针对主流数据库的完善方案:
针对MySQL 8+ / PostgreSQL的版本
这个版本用JSON格式返回分组结果,方便后续程序解析:
SELECT -- 总记录数:两张表的计数之和 (SELECT COUNT(*) FROM priority_list) + (SELECT COUNT(*) FROM priority_list_delete) AS tot_count, -- priority_list表的单独记录数 (SELECT COUNT(*) FROM priority_list) AS prior_cnt, -- priority_list_delete表的单独记录数 (SELECT COUNT(*) FROM priority_list_delete) AS prior_del_cnt, -- priority_list_delete按类别分组的记录数,转成JSON对象 (SELECT JSON_OBJECT_AGG(category, cnt) FROM ( SELECT category, COUNT(*) AS cnt FROM priority_list_delete GROUP BY category ) AS grouped_categories) AS del_category_counts;
针对SQL Server的版本
如果用SQL Server,它没有JSON_OBJECT_AGG,可以用字符串拼接的方式展示分组结果:
SELECT (SELECT COUNT(*) FROM priority_list) + (SELECT COUNT(*) FROM priority_list_delete) AS tot_count, (SELECT COUNT(*) FROM priority_list) AS prior_cnt, (SELECT COUNT(*) FROM priority_list_delete) AS prior_del_cnt, (SELECT STRING_AGG(CONCAT(category, ':', cnt), ', ') FROM ( SELECT category, COUNT(*) AS cnt FROM priority_list_delete GROUP BY category ) AS grouped_categories) AS del_category_counts;
说明
- 前三个字段和你原来的查询完全一致,分别对应总记录数、两张表的单独计数。
- 第四个字段
del_category_counts会返回类似{"类别A":5, "类别B":3}(JSON版)或者类别A:5, 类别B:3(字符串版)的结果,把所有分组的计数打包在单行里。
内容的提问来源于stack exchange,提问作者Debs
相关产品推荐
相关产品推荐

