# Gruppieren nach 2 Spalten inkl. Count



## soraxdesign (5. November 2007)

Hallo,
ich habe eine Tabelle mit folgendem Aufbau:

ID   jobart  stID
1                1                   2
2                1                   2
3                1                   4
5                2                   5
6                2                   5
7                3                   6
8                3                   6
9                3                   6
10              4                   7
11              4                   8
12              4                   8
13              5                   10
14              5                   10
15              5                   11

Die Einträge erscheinen jetzt doppelt, sind jedoch durch weitere Spalten wohl unterschieden, die hier aber nicht relevant sind. So ist jedoch der Aufbau meiner Tabelle. Als Ausgabe möchte folgendes haben:

jobart  count()
1                      2
2                      1
3                      1
4                      2
5                      2

d.h. es sollen doppelte stID gefiltert, nach jobart gruppiert und dann gezählt werden. wie stelle ich das an? Ich habe es hiermit probiert, jedoch gruppiert mir SQL dann nicht nach jobart:


```
SELECT jobart, COUNT(*) FROM tabelle GROUP BY stID, jobart
```

Habt ihr eine Lösung für mich?


----------



## ishino (5. November 2007)

```
SELECT jobart, COUNT(*) FROM tabelle GROUP BY jobart
```


----------



## soraxdesign (5. November 2007)

Danke für deine Hilfe, aber das habe ich schon versucht. Es sollen ja erst alle doppelten stID zusammengefasst werden und dann nach jobart gruppiert/gezählt werden. BEi deinem Vorschlag würde ich ja folgendes herausbekommen:

jobart COUNT()
1            3
2            2
3            3
4            3
5            3

Das hilft mir aber nicht weiter. Wie kann ich zuerst nach stID und dann jobart gruppieren und bekomme hinterher die Anzahl, wieviele stIDs in einer Jobart vertreten sind? (ohne doppelte stIDs). Geht da was mit GROUP_CONCAT? Habe den Befehl gefunden aber noch keine logische Einsetzbarkeit gesehen.

Danke für euer Hilfe!


----------



## fluessig (5. November 2007)

Ich hab mich auch schon dran versucht, aber nichts brauchbares zusammengebracht. Was ich aber sicher sagen kann ist, dass du DISTINCT verwenden musst. Distinct verhindert mehrfachzählen gleicher Daten. Was ich irgendwie noch nicht geschafft hab ist, dass es auf die Paare aus jobart und stID angewandt wird.

Hab's jetzt doch noch zum Laufen gebracht mit 2 Abfragen:

Abfrage1:

```
SELECT DISTINCT "jobart", stID FROM "Tabelle1"
```

Abfrage2:

```
SELECT DISTINCT jobart,COUNT(*) FROM Abfrage1 GROUP BY jobart
```

Irgendwie kann man das schon noch in eine Abfrage verwurschten, aber ich hab grad leichte Konzentrationsstörungen.


----------



## ishino (6. November 2007)

Sorry, zu früh aufgehört mit Lesen... ;-)

```
SELECT jobart, count(*)
FROM
(
  SELECT jobart, stid
  FROM t_job
  GROUP BY jobart, stid
)
GROUP BY jobart
ORDER BY jobart;
```

Oder, wie es der Kollege von oben schon erwähnte, eben mit DISTINCT (was im Grunde genommen genau das Gleiche ist, wie das Gruppieren von oben):

```
SELECT jobart, COUNT(*)
FROM 
(
  SELECT DISTINCT jobart, stid
  FROM t_job
)
GROUP BY jobart
ORDER BY jobart;
```


----------



## fluessig (6. November 2007)

Ich hab mir auch gedacht, dass es so laut SQL Syntax gehen sollte, aber in Open Office Base hat es mit den ( ) nicht geklappt. Keine Ahnung ob das nur rumzickt oder noch ein Fehler drin ist.


----------



## ishino (6. November 2007)

Es zickt rum...


----------

