当一个查询为行数较少的内部联接时,将两个查询结果组合在一起

时间:2018-10-03 17:36:20

标签: sql hive hiveql

我有一个表(表1),我需要从中获取用户计数并从中创建一个百分比。背景是该表具有该表上的用户详细信息。我需要获得具有特定用法的所有用户的百分比,这只能通过内部连接到另一个表(表2)来获得。

Table1AccountNumber     Table1WithJoinAccountNumber
1                       1 
2                       3
3                       4
4                       

使用Tableau之类的工具进行计算的最终结果将是能够使用帐号列表进行以下操作,该列表还取决于使用日期和其他参数。

COUNT(DISTINCT Table1WithJoinAccountNumber)/ Count(distinct Table1AccountNumber)
with source above = 3/4 = 75%

我的挣扎是我想链接两个结果,以便我可以对每个帐号进行准确计数,因为内部联接在结果中会有更少的帐户。有可能吗?

2 个答案:

答案 0 :(得分:0)

您可以在加入之前进行汇总:

select t2.cnt * 1.0 / t1.cnt
from (select count(distinct accountid) as cnt from Table1AccountNumber) t1 cross join
     (select count(distinct accountid) as cnt from Table1WithJoinAccountNumber) t2;

大概第二个表中的帐户是已知的,因此不需要join

答案 1 :(得分:0)

您需要左加入:

select  day, count(t2.accountid)/count(t1.accountid) as pct    
from (select distinct accountid, day from Table1AccountNumber) t1
     left join  
     (select distinct accountid, day from Table1WithJoinAccountNumber) t2
     on t1.accountid = t2.accountid and t1.day=t2.day
group by day