Mysql分组和计数

时间:2011-07-26 14:05:57

标签: mysql join count group-by

我有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

2 个答案:

答案 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 )
相关问题