我有3张桌子:
1 TableTraders
trader_id|Domain|
---------------------
1|google.com
2|yahoo.com
2 Table Counter_in
counter_time counter_ip counter_domain_id
111111 222222 1
111111 222224 2
111111 222225 3
111111 222232 2
111111 222221 3
111111 222223 4
1111311 22223422 5
3 Table Out Counter
counter_time counter_ip counter_domain_id
111111 222222 1
111111 222222 2
111111 222222 3
111111 222226 2
111111 222221 3
111111 222222 4
1309351485 2130708581 5
1309351485 2130708581 4
1309710116 2130706433 4
1309351485 2130708581 1
1309710274 2130706433 1
好的,我想要todo加入表1,2,3并将它们组合在一起,并计算它们。
trader_id|DOMAIN|IN|OUT
--------------------------
1|google.com|3|1
2|yahoo.com|1|2
我尝试了很多东西,但结果总是错误的。我如何加入我得到我想要的结果的查询
* 修改的
尝试查询:
SELECT traders.trader_id, traders.domain, COUNT( counter_in.counter_domain_id ) AS today_in, COUNT( counter_out.counter_domain_id ) AS today_out
FROM traders
JOIN counter_in ON traders.trader_id = counter_in.counter_domain_id
JOIN counter_out ON traders.trader_id = counter_out.counter_domain_id
GROUP BY traders.trader_id, traders.domain
LIMIT 0 , 30
结果:
trader_id domain today_in today_out
1 bing.com 3 3
2 google.com 4 4
3 yahoo.com 4 4
4 msn.com 3 3
5 yandex.com 1 1
答案 0 :(得分:1)
SELECT
TableTraders.trader_id,
TableTraders.Domain,
COUNT(TableIn.trader_id) AS in_count,
COUNT(TableOut.trader_id) AS out_count
FROM TableTraders
JOIN TableIn ON TableTraders.trader_id = TableIn.trader_id
JOIN TableOut ON TableTraders.trader_id = TableOut.trader_id
GROUP BY TableTraders.trader_id, TableTraders.Domain
不确定上面示例中的表名是什么,因为它们包含空格。替换正确的表名。
答案 1 :(得分:0)
看来另一个答案可能是给你一些笛卡尔结果,从而重复结果。带上您的交易者并加入来自相应的进/出表的不同子查询计数。
SELECT
TT.trader_id,
TT.Domain,
TIN.InCount,
TOUT.OutCount
FROM
TableTraders TT
LEFT Join ( select Trader_ID, count(*) as InCount
from TableIn
group by Trader_ID ) TIN
on TT.Trader_ID = TIN.Trader_ID
LEFT Join ( select Trader_ID, count(*) as InCount
from TableOut
group by Trader_ID ) TOUT
on TT.Trader_ID = TOUT.Trader_ID
如果你想通过每个输入/输出的DISTINCT IP地址,只需更改
COUNT(*)
to
COUNT( Distinct IP )