涉及连接的查询--合并我们两张表的数据。

问题描述 投票:0回答:1

我们需要将我们的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

我可以把上面的问题分成两部分,并为每一部分编写单独的查询:第一部分:获取给定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;

Op:

`region_code`    `count_of_active_deals_with_given_display_control_for_region_code  
  US                          1                                                                                                                
  CA                          1     

第2部分:要获得给定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 group by active_deals.region_code;

Op.Part2:获取活动交易并按区域进行分组

`region_code`    `count_of_active_deals_for_region_code`
  US                          2
  CA                          1

我需要将这两个查询合并成一个查询。是否可以这样做?

mysql sql join inner-join
1个回答
1
投票

在计算时,你可以添加额外的条件 control_id

select d.region_code
     , count(distinct d.deal_id) count_of_active_deals_for_region_code
     , SUM(c.display_control_id = 'dc1') count_of_active_deals_with_given_display_control_for_region_code
  from active_deals d
  left 
  join deal_display_controls c
    on d.deal_id = c.deal_id
group 
    by d.region_code

Fiddle: http:/sqlfiddle.com#!99046702。


1
投票

我想你想要一个 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
© www.soinside.com 2019 - 2024. All rights reserved.