2015-08-08 91 views
0

我有三个表:域,注册和跟踪。如何连接三个表,同时从两个表中统计

我公司目前拥有的所有域的列表,并使用此查询参观人数:

SELECT sites.id, sites.domain, count(tracking.domain) as tracked FROM sites 
LEFT JOIN tracking ON sites.domain = tracking.domain 
GROUP BY sites.domain 
ORDER BY sites.id; 

现在,我也想从一个新的表名为注册等获得数(每个域)。

我就得到了,因为这:

SELECT sites.id, sites.domain, count(tracking.domain) as tracked, signers.cc FROM sites 
LEFT JOIN tracking ON sites.domain = tracking.domain 
LEFT JOIN (
SELECT signups.domain, count(*) as cc FROM signups 
GROUP BY signups.domain 
) as signers 
USING (domain) 
ORDER BY sites.id; 

但是这似乎并不很正确。有什么建议么?

+0

做多重查询有什么问题吗? –

+0

不,但我只是觉得这很容易做到,而且我在寻找一些东西。 – speg

+0

嗯,也许我在最后只是遗漏了一个最后的GROUP BY。 – speg

回答

0

在这里你去:(你可以添加外部联接,只要你喜欢,我只是指出你在朝着正确的方向)

with trackingCount as 
(
select sites.domain, 
     count(1) as tracked 
    from sites, 
     tracking 
where tracking.domain = sites.domain 
group by sites.domain), 
signupsCount as 
(
select sites.domain, 
     count(1) as signedUP 
    from sites, 
     signups 
where signups.domain = sites.domain 
group by sites.domain) 
select * 
    from trackingCount tc, 
     signupsCount sc 
where tc.domain = sc.domain; 

给出:

domain tracked signedUP 
A  4  2 
B  1  4 

你可以玩在这里附近:

http://sqlfiddle.com/#!7/bec74/2

相关问题