选择unic ctn并按区域对它们进行分组

时间:2017-04-21 11:14:03

标签: sql hive

我有3张桌子

ctn  region
1    a
1    a
2    b
3    c
8    n

MTA

ctn
1   
1   
2   
3 
4  

RCR

ctn
1   
1   
2   
3 
4  
5

我需要找到每个地区的不同用户数量。在这种情况下,结果将是

RES

a  1
b  1
c  1
n  1
null 2

如果用户不在任何地区,那么我需要知道有多少用户喜欢他。

到目前为止我所拥有的。

WITH com as(
  SELECT DISTINCT ctn
  FROM (
    SELECT ctn
    FROM mta
    UNION ALL
    SELECT ctn
    FROM rcr
  ) c
)
, distinct_ctn as(
  SELECT DISTINCT sub.ctn, com.ctn, sub.region
  FROM sub
  FULL JOIN com
  ON sub.ctn = com.ctn
)
SELECT region, count(*)
FROM distinct_ctn
GROUP BY region;

1 个答案:

答案 0 :(得分:0)

有一个子查询,您可以使用UNION从mta和rcr表中获取不同的cnt值。

带有该结果的

RIGHT JOIN表子,最后是GROUP BY加入结果。

select s.region, count(distinct u.ctn)
from sub s
right join (select ctn from mta
            union
            select ctn from rcr) u
   on s.ctn = u.ctn
group by s.region