# Count(*) auf 2 Tabellen anwenden



## DaSt (29. Apr 2016)

Hallo, 

ich habe 2 Tabellen, eine Kunden und eine Personaltabelle. Ich möchte die Orte und die Anzahl aufgelistet haben, aus denen Kunden und Personal kommen. 


```
select ort, count(*) as anzahl
from personal
group by ort
union
select ort, count(*) as anzahl
from kunde group by ort;
```

Als Ausgabe erhalte ich aber z.B. 
Berlin - 3
Berlin - 2

Also 3 Mitarbeiter kommen aus Berlin und 2 Kunden, ich möchte aber die Gesamtanzahl, dass also "Berlin - 5" dasteht. Wie kann ich das machen. 

Danke


----------



## Dukel (29. Apr 2016)

Ich glaube du brauchst einen Join und kein Union.


----------



## DaSt (29. Apr 2016)

habs nun mal folgendermaßen mit einem join versucht: 


```
SELECT personal.ort, COUNT(*) AS anzahl
FROM personal inner join kunde on(personal.ort=kunde.ort)
GROUP BY personal.ort;
```

ich erhalte als Ausgabe "Berlin - 6" obwohl es nur 3 Mitarbeiter aus Berlin und 2 Kunden aus B. gibt. Es müsste doch eig. 5 rauskommen.


----------



## fhoffmann (29. Apr 2016)

Versuche es doch mit:

```
select ort, count(*) as anzahl from
(select ort from Person
 union
 select ort from kunde
)
group by ort;
```


----------



## DaSt (29. Apr 2016)

hmm... bei deinem Vorschlag ist die Anzahl zu jeder Stadt 1

Berlin - 1
München - 1
Hamburg - 1
etc.


----------



## kaeru (29. Apr 2016)

Statt "union" musst es "union all" heißen.
Ohne "all" liefert ein "union" nur Zeilen mit unterschiedlichem Inhalt.


----------



## DaSt (29. Apr 2016)

aaa.. jetzt hab ich`s es muss UNION ALL heissen, dann klappt`s


```
select ort, count(*) as anzahl from
(select ort from Person
union ALL
select ort from kunde
)
group by ort;
```

Vielen Dank

EDIT*
keru war etwas schneller


----------



## fhoffmann (29. Apr 2016)

oops - das dürfte am union liegen, das automatisch ein "distinct" macht. Vielleicht geht (wenn du einen Primärschlüssel "idno" hast):

```
select ort, count(*) as anzahl from
(select idno, ort from personal
 union
 select idno, ort from kunde
)
group by ort;
```


----------

