2011-07-26 75 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