Mysql Группировка и подсчет - PullRequest
0 голосов
/ 26 июля 2011

у меня есть 3 таблицы:

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

Я пробовал много вещей, но я всегда получаю неправильные результаты. Как мне присоединиться к запросам, которые я получаю, результаты, которые я хочу

* EDIT

Попытка запроса:

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 ]

1 голос
/ 26 июля 2011
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 голосов
/ 26 июля 2011

Похоже, что другой ответ может дать какой-то декартовый результат, дублирующий результаты. Возьмите своих трейдеров и присоединитесь к различным подсчетам подзапросов из соответствующих таблиц ввода / вывода.

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 )
...