2011-07-26 74 views
0

我有一个3个表:Mysql的分组和计数

1 TableTraders 
trader_id|Domain| 
--------------------- 
1|google.com 
2|yahoo.com 

2表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 

好吧,我想要什么待办事项是联接表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

你certian了'counter_in'的内容和'counter_out'表有什么不同?请张贴他们。 –

+0

更新迈克尔:) – Plob

回答

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 

如果你想它由不同的IP地址,每输入/输出,只需改变

COUNT(*) 
to 
COUNT(Distinct IP) 
+0

嗨,看我在我的帖子中编辑,仍然有些麻烦,谢谢你的帮助。 – Plob

+0

更新:它的工作感谢您!我忘了一个“,” – Plob

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 

不能肯定你的表格名称来自上面的示例,因为它们包含在内在空间。替换正确的表名。

+0

谢谢你的回答,即时得到重复结果,这也发生在我的查询:( 'trader_id \t域\t today_in \t today_out' '1 \t bing.com 3' ' 2 \t \t google.com 4 \t 4' '3 \t \t yahoo.com 4 \t 4' '4 \t \t msn.com 3 \t 3' '5 \t \t yandex.com1 1 \t 1' – Plob

+0

@Plob发布您运行的查询,作为对上述问题的编辑。 –

+0

已更新谢谢:) – Plob