[SQL] Reihenanzahl für ID ermitteln

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

[SQL] Reihenanzahl für ID ermitteln

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Beitrag 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
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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? :?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Beitrag 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 ;)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: [SQL] Reihenanzahl für ID ermitteln

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Antworten