2017-04-21 53 views
-2

选择UNIC箱和他们组我有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 

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

资源

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; 
+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 
+0

这不是只能计算mta和rcr中不同的ctns吗?如果在其他表格中没有ctn,该怎么办?如果在sub中有2行用户1会怎么样?那么右连接意味着2个相同的行。分组将返回错误的结果。 –

+0

添加更多示例数据以使事情变得更复杂一些,并调整预期结果。然后看看查询是否仍然有效。 (很难确切知道你在找什么......) – jarlh