BigQuery SQL查询问题:按代表名字母排序并分组统计同类别实例
解决方案:正确分组排序并统计组合行数
首先明确你的核心需求:按es_representative_name字母顺序排列结果,对es_representative_name+category的唯一组合分组并统计行数,同时显示对应category。
你第四次尝试的查询其实已经满足需求,所谓“随新category重启排序”是误解——该查询的ORDER BY es_representative_name ASC, category ASC会先把所有相同es_representative_name的记录聚合在一起,整体按代表名称字母顺序排列,同一代表下再按category排序。你觉得看起来像是“重启排序”,只是因为同一代表下的category不同,但代表名称的排序是全局连续的。
如果需要严格确保代表名称的全局字母顺序,同时保留分组统计,这个查询完全没问题:
SELECT es_representative_name, category, COUNT(*) AS row_count FROM `vox-007.ds_007_01.dt_007_01oB` GROUP BY es_representative_name, category ORDER BY es_representative_name ASC, category ASC;
额外优化:合并同一代表的多行展示(可选)
如果你的需求是让同一个es_representative_name只显示一次,把对应的category和计数整合在一起,可以用STRING_AGG函数将category和计数拼接:
SELECT es_representative_name, STRING_AGG( CONCAT(COALESCE(category, 'NULL'), ' (', COUNT(*), ')'), ', ' ORDER BY category ASC ) AS category_counts FROM `vox-007.ds_007_01.dt_007_01oB` GROUP BY es_representative_name ORDER BY es_representative_name ASC;
这里用COALESCE处理category的NULL值,把NULL显示为明确的字符串,同时按category排序拼接结果,确保输出清晰。
关于之前查询的问题解析
- 前三次查询没有同时按两个字段分组,无法统计每个组合的行数,不符合核心需求。
- 第五次查询去掉了category排序,同一代表下的category会随机排列,仅保留代表名称的全局排序,内部顺序混乱,不建议使用。
内容的提问来源于stack exchange,提问作者dsx
相关产品推荐
相关产品推荐

