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.
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.
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