如何合并关联active_deals与deal_display_controls的两个分组统计SQL查询?
合并两个SQL查询为单个查询的解决方案
当然可以把这两个独立查询合并成一个!我们可以利用条件聚合的方式,在同一个分组查询中同时计算两个统计指标,这样只需要一次关联表操作就能得到结果,效率更高。
合并后的SQL语句
SELECT active_deals.region_code, COUNT(CASE WHEN deal_display_controls.display_control_id = 0xc04e20724f5f49c9a285cb3c98d777b4 THEN 1 END) AS count_of_active_deals_with_given_display_control_for_region_code, COUNT(*) AS count_of_active_deals_for_region_code FROM active_deals JOIN deal_display_controls ON active_deals.bin_deal_id = deal_display_controls.deal_id GROUP BY active_deals.region_code;
语句解释
- 条件聚合实现指定条件计数:
COUNT(CASE ...)是核心逻辑——当display_control_id匹配你指定的值时,CASE返回1,否则返回NULL;而COUNT()函数会自动忽略NULL值,最终统计的就是符合指定条件的交易数量。 - 全量有效交易计数:直接用
COUNT(*)统计关联后的所有行数,就是每个region_code下的所有有效交易数量。 - 分组逻辑:依然按
active_deals.region_code分组,保证每个地区的两个统计值对应正确。
预期输出
当指定display_control_id为0xc04e20724f5f49c9a285cb3c98d777b4时,输出会和你预期的完全一致:
| region_code | count_of_active_deals_with_given_display_control_for_region_code | count_of_active_deals_for_region_code |
|---|---|---|
| US | 1 | 2 |
| CA | 1 | 1 |
为什么这样更好?
相比原来的两个独立查询,合并后的语句只需要一次表关联操作,避免了重复扫描和关联相同的数据,在数据量较大时能明显提升查询效率,同时也让逻辑更集中,便于维护。
内容的提问来源于stack exchange,提问作者user3903418
相关产品推荐
相关产品推荐

