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