Seite 1 von 3

[SQL] Reihenanzahl für ID ermitteln

Verfasst: 11.10.2007 11:20
von Fluid Byte
Ich habe folgende Liste:

Code: Alles auswählen

SeatID | Wert
--------------
     1 | 124
--------------
     1 | 897
--------------
     1 | 235
--------------
     2 | 643
--------------
     3 | 246
--------------
     3 | 434
Wie kann ich nun rausfinden wieviele Elemente/Reihen z. B. SeatID Nr.1 hat (was hier 3 wäre)? Den Befehl COUNT() hab ich schon probiert aber der zählt die gesamte Tabelle.

Verfasst: 11.10.2007 11:25
von gekkonier
SELECT COUNT(*) FROM Personen WHERE Abteilung = 'Entw'
"COUNT(*)" zählt die Zahl der Zeilen, die die Bedingung erfüllen.
Ohne WHERE-Bedingung würde gezählt, wie viele Zeilen die Tabelle beinhaltet.
Allerdings sind solche Zahlen mit Vorsicht zu gebrauchen, da wenige Sekunden später vielleicht eine andere Anwendung eine zusätzliche Zeile hinzugefügt oder eine andere entfernt haben könnte.
Quelle: http://www.torsten-horn.de/techdocs/sql-examples.htm

Verfasst: 11.10.2007 12:41
von Fluid Byte
Funktioniert nicht, ich hätte das gebraucht:

Code: Alles auswählen

SELECT SeatID, COUNT(*) FROM table_main GROUP BY SeatID;
Allerdings wär ich ohne die Seite nie drauf gekommen. :mrgreen:

Ich hab aber noch'n Problem. Wie liste ich die zweite Spalte "Wert" mit auf? Wenn ich dies benutze:

Code: Alles auswählen

SELECT SeatID, Wert, COUNT(*) FROM table_main GROUP BY SeatID;
Dann fasselt MS Access immer von "Ausdruck ist nicht Teil der Aggregatsfunktion". W00t? :?

Verfasst: 11.10.2007 12:57
von gekkonier
Wenn du das hast:

Code: Alles auswählen

SeatID | Wert
--------------
     1 | 124
--------------
     1 | 897
--------------
     1 | 235
--------------
     2 | 643
--------------
     3 | 246
--------------
     3 | 434
Was soll dann "hinten" rauskommen?

Select Count(*) liefert einen Wert zurück
Select * liefert eine "Tabelle" zurück
Select SeatID, Wert liefert eine "Tabelle" mit den beiden Spalten zurück

Du kannst nicht * oder SeatID,Wert mit Count(*) mischen ;)

Verfasst: 11.10.2007 13:10
von Fluid Byte
Ich habe Count(*) komplett rausgenommen, es liegt an dem GROUP BY Befehl.

Code: Alles auswählen

SELECT SeatID, Wert FROM table_main GROUP BY SeatID;
Da kommt wieder die Meldung mit der Aggregatsfunktion. Muss GROUP BY noch eine HAVING Bedingung haben bzw. fehlt hier eine WHERE Anweisung?

Re: [SQL] Reihenanzahl für ID ermitteln

Verfasst: 11.10.2007 13:38
von STARGÅTE
Fluid Byte hat geschrieben:Ich habe folgende Liste:

Code: Alles auswählen

SeatID | Wert
--------------
     1 | 124
--------------
     1 | 897
--------------
     1 | 235
--------------
     2 | 643
--------------
     3 | 246
--------------
     3 | 434
Wie kann ich nun rausfinden wieviele Elemente/Reihen z. B. SeatID Nr.1 hat (was hier 3 wäre)? Den Befehl COUNT() hab ich schon probiert aber der zählt die gesamte Tabelle.

Code: Alles auswählen

SELECT COUNT(*) AS Anzahl FROM table_main WHERE SeatID = 1
Ergebnis : Anzahl = 3

Verfasst: 11.10.2007 17:48
von Fluid Byte
Hmmm, vielleicht mal etwas plastischer.

Aus dem hier

Code: Alles auswählen

SeatID | Wert
----------------
   1   |  124
----------------
   1   |  897
----------------
   1   |  235
----------------
   2   |  643
----------------
   3   |  246
----------------
   3   |  434
soll das werden

Code: Alles auswählen

SeatID |  Wert | Expr1001*
--------------------------
   1   |  124  |   3
--------------------------
   2   |  643  |   1
--------------------------
   3   |  246  |   2
* diese Spalte wird durch die COUNT() Funktion hinzugefügt

Verfasst: 11.10.2007 18:17
von bobobo
wozu im Ergebnis die wert-Spalte? Soll da ne Summe (*) oder
sowas rein? ansonsten hat die Spalte Wert so nicht viel Wert

(*)
select seatID,count(*),sum(wert) as 'anzahl' from test group by SeatID
oder
select seatID,count(*),max(wert) as 'anzahl' from test group by SeatID
oder
select seatID,count(*),min(wert) as 'anzahl' from test group by SeatID
oder
select seatID,count(*),avg(wert) as 'anzahl' from test group by SeatID

Verfasst: 12.10.2007 12:57
von Fluid Byte
bobobo hat geschrieben:wozu im Ergebnis die wert-Spalte? Soll da ne Summe (*) oder sowas rein? ansonsten hat die Spalte Wert so nicht viel Wert
Nein, da soll keine Summe rein. Die gesamte Tabelle ist ja sowieso fiktiv. In der eigentlichen Datenbank haben wir circa 11 Spalten mit Text die mit aufgelistet werden müssen. Aber genau das funktioniert nicht my GROUP BY. Sobald der SELECT Aufruf mehr als eine Spalte beinhaltet gibt Access den besagten Fehler aus.

Die Abfrage wird akzeptiert wenn die zusätzliche Spalte im GROUP BY Befehl mit angegeben wird:

Code: Alles auswählen

SELECT SeatID, Wert
FROM table_main
GROUP BY SeatID, Wert
Allerdings werden dann alle ID's angezeigt was ich ja gearde verhindern will.

Verfasst: 12.10.2007 13:10
von Kiffi
Fluid Byte hat geschrieben:

Code: Alles auswählen

SELECT SeatID, Wert
FROM table_main
GROUP BY SeatID, Wert
Allerdings werden dann alle ID's angezeigt was ich ja gearde verhindern will.
dann noch ein "Where SeatID = XX" zwischen From und Group by und fertig.

Grüße ... Kiffi