包含join的查询-合并来自两个表的数据

tyu7yeag  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(281)

我们需要合并两个表中的数据- active_deals 以及 deal_display_controls . 其中的(相关)列为:

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

查询需要获取具有给定display\u control\u id的所有活动交易的所有计数,并按其区域代码(按区域代码分组)对它们进行分组。除此之外,它还需要按地区代码对活动的交易进行分组(没有display\u control\u id约束)
因此,如果活动交易表如下所示:

deal_id  region_code
   d1           US
   d2           CA
   d3           US

交易显示控件如下所示:

`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

我可以通过将上述问题分为两部分并为每个部分编写单独的查询来实现这一点:第1部分:获取给定display\u control\u 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

我需要知道如何将这两个查询组合成一个查询。有可能这样做吗?

nwnhqdif

nwnhqdif1#

在计算时,您可以添加额外的条件 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

小提琴:http://sqlfiddle.com/#!9/904670/2
r6hnlfcb

r6hnlfcb2#

我想你想要一个 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

相关问题