我们需要合并两个表中的数据-active_deals
和deal_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
我可以通过将上述问题分为两个部分,并为每个部分编写单独的查询来做到这一点:第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;
O / p:
`region_code` `count_of_active_deals_with_given_display_control_for_region_code
US 1
CA 1
Part2:获取有效交易并按地区代码分组查询相同:
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;
O / p:
`region_code` `count_of_active_deals_for_region_code`
US 2
CA 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