首页 > 解决方案 > 涉及连接的查询 - 合并来自我们的 2 个表的数据

问题描述

我们需要合并来自 2 个表的数据 -active_dealsdeal_display_controls. 它们中的(相关)列是:

`active_deals` : `deal_id`, `region_code`
`deal_display_controls` : `deal_id`, `display_control_id`

查询需要获取具有给定 display_control_id 的所有活动交易的所有计数,并按其 region_code 分组(按区域代码分组)。除此之外,它还需要按区域代码对活动交易进行分组(没有 display_control_id 约束)

因此,如果活动交易表如下所示:

deal_id  region_code
   d1           US
   d2           CA
   d3           US   

deal_display_controls 看起来像:

`deal_id`    `display_control_id`
   d1              dc1
   d2              dc1
   d3              dc2
   d4              dc1

然后对于给定的显示控件 id = “dc1” 查询应输出:

`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

我可以通过将上述问题分成 2 个部分并为每个部分编写单独的查询来做到这一点: 第 1 部分:获取给定 display_control_id 的有效交易并按区域代码分组查询相同:

select count(*), region_code from active_deals join deal_display_controls on active_deals.bin_deal_id=deal_display_controls.deal_id where deal_display_controls.display_control_id=0xc04e20724f5f49c9a285cb3c98d777b4 group by active_deals.region_code;

开/关:

`region_code`    `count_of_active_deals_with_given_display_control_for_region_code  
  US                          1                                                                                                                
  CA                          1     

第 2 部分:获取活动交易并按区域代码分组查询相同:

select count(*), 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;

开/关:

`region_code`    `count_of_active_deals_for_region_code`
  US                          2
  CA                          1

我需要将这两个查询组合成一个查询。是否有可能做到这一点?

标签: mysqlsqljoininner-join

解决方案


我认为你想要一个join有条件的聚合:

select d.region_code,
       sum(ad.display_control_id = 1),
       count(*)
from active_deals ad join
     deals d
     on ad.deal_id = d.deal_id
group by d.region_code

推荐阅读