加入和分组以等同于两个表

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

我已尝试尽可能减少此问题。我有两个共享一些ID的表(在其他列中)

 id       id
----     ----
  1        1
  1        1
  2        1
           2
           2

首先,我可以将每个表解析为一个简单的计数,其中包含每个ID的数量:

select id, count(*) from tbl1 group by id
select id, count(*) from tbl2 group by id

id | tbl1-count    id | tbl2-count
---------------    ---------------
 1       2          1         3
 2       1          2         2

但是我很不知所措,我试图得到以下输出,该输出显示每个id从tbl2的计数,除以相同id从tbl1的计数:

out-id | out-count
==================
   1   |    1.5
   2   |    1

到目前为止,我已经知道了:

select tbl1.Id, tbl2.Id, count(*)
from tbl1 
join tbl2 on tbl1.Id = tbl2.Id
group by tbl1.Id, tbl2.Id

这只是给我...好吧...说实话,这远远超出了我的需求!我正在尝试count(tbl1.Id),count(tbl2.Id),但得到相同的乘数(因为我想加入吗?)-我无法将单个表示放入可以进行除法的单个列中。

非常感谢任何建议!

sql sql-server
1个回答
0
投票

您可以先聚合子查询,然后再聚合join

select t1.id, t2.cnt / t1.cnt
from (select id, count(*) as cnt
      from tbl1
      group by id
     ) t1 join
     (select id, count(*) as cnt
      from tbl2
      group by id
     ) t2
     on t1.id = t2.id
© www.soinside.com 2019 - 2024. All rights reserved.