SQL Добавление количества вхождений из разных таблиц

Я написал запрос:

SELECT  `name` , COUNT( * ) FROM  `daily` GROUP BY  `Name` 
UNION 
SELECT  `name` , COUNT( * ) FROM  `monday` GROUP BY  `Name` 

Я получаю этот результат

Name  |  Count(*)
-------------------

Person 1 | 10 |

Person 2 | 05 |

Person 3 | 00 |

Person 1 | 08 |

Person 2 | 10 |

Я просто хочу получить этот результат:

Name  |  Count(*)
-------------------
Person 1 | 18 |

Person 2 | 15 |

Person 3 | 00 |

Я хочу добавить два значения из двух таблиц к одному и тому же «имени». Какую команду соединения я использую здесь?


person The Ninja    schedule 26.12.2013    source источник
comment
Я использую MySQL. Извините за неправильный тег :-(   -  person The Ninja    schedule 26.12.2013


Ответы (3)


Вы хотите выполнить union перед агрегированием:

select name, count(*)
from (select name from daily union all select name from monday) t
group by name;

Вы также можете предварительно агрегировать значения, хотя я не уверен, есть ли прирост производительности в MySQL для этого:

select name, sum(cnt)
from ((select name, count(*) as cnt from daily group by name)
      union all
      (select name, count(*) as cnt from monday group by name)
     ) t
group by name;
person Gordon Linoff    schedule 26.12.2013
comment
Работает отлично - Спасибо! - person The Ninja; 26.12.2013

Это не проверено

select name, SUM(total)
from ( 
  SELECT name , COUNT( * ) as total
  FROM daily 
  GROUP BY Name 

  UNION 

  SELECT name ,COUNT( * ) as total
  FROM monday 
  GROUP BY Name 
) 
GROUP BY name;

Надеюсь, это сработает :)

person Sabri Aziri    schedule 26.12.2013
comment
Это возвращает ошибку: # 1248 - каждая производная таблица должна иметь свой собственный псевдоним. - person The Ninja; 26.12.2013
comment
В этом случае вы должны использовать union all. В противном случае, если одно имя имеет одинаковое количество в обеих таблицах, вы получите только это значение (когда оно должно быть вдвое больше). - person Allan; 26.12.2013

person    schedule
comment
Я написал это для SQL Server, но концепция должна быть той же. - person SteveB; 26.12.2013
comment
Это возвращает синтаксическую ошибку, я пробовал это и другими способами, но все равно выдает # 1064 - у вас есть ошибка в синтаксисе SQL в строке 1. - person The Ninja; 26.12.2013
comment
Я предполагаю, что вы не можете использовать [] в MySQL. - person SteveB; 26.12.2013