Entwickler-Ecke

Datenbanken - Brauche kleine Hilfestellung bei SELECT-Befehl


Kay E. - Fr 14.10.11 14:39
Titel: Brauche kleine Hilfestellung bei SELECT-Befehl
Hallo!

Ich versuch mich gerade in SQL einzuarbeiten und bastel deswegen gerade an einer einfachen Datenbank herum.
Die Datenbank hat folgende Spalten: ID (Index) INTEGER, Key INTEGER, Effekt INTEGER
Es können mehrere Identische Keys und Effekte vorkommen. Nehmen wir mal an, in der Tabelle stehem folgende Einträge drin:

Quelltext
1:
2:
3:
4:
0;1234567;0
1;9876543;0
2;1234567;0
3;5647823;1


Ich möchte jetzt alle Keys haben, bei der der Effekt 0 ist. Dabei sollen doppelt vorkommende Keys zusammengefasst werden und die Anzahl der Keys soll erfasst werden. Das ganze soll absteigend nach der Anzahl der Keys sortiert werden.

Ich hab bisher diesen Select-Befehl zusammengeschustert:

Quelltext
1:
SELECT DISTINCT a.Key, COUNT(a.Key) AS Anzahl FROM TestTable a WHERE Effekt = 0 ORDER BY Anzahl DESC                    


Das liefert als Ergebnis aber nur folgende Tabelle:

Quelltext
1:
2:
Key;Anzahl
1234567;2


Der Eintrag 9876543;1 fehlt. Lass ich den COUNT-Abschnitt in der Abfrage weg, werden beide Keys ordentlich angezeigt.

Ich denke, für euch Profis ist das eine Sache von Sekunden, aber ich habs obv. nicht hinbekommen :)
Bin für jede Hilfe dankbar!

Grüße Kay


bummi - Fr 14.10.11 14:46

versuch mal

Quelltext
1:
2:
3:
4:
5:
SELECT Key, COUNT(*) AS Anzahl 
FROM TestTable 
WHERE Effekt = 0
Group by Key
Order by COUNT(*) DESC


Kay E. - Fr 14.10.11 14:58

Schick! Funktioniert, danke!
Jetzt muss ichs nur noch nachvollziehen...
Durch weiteres rumprobieren ist mir grad aufgefallen, dass Count(a.Key) keinen Sinn macht, da ich da ja nur die Anzahl der Keys zähle.

So, und jetzt schaun mer mal, ob ich das versteh.
Die Bezeichner vor z.B. Key fallen weg, weil es nur eine Tabelle ist, von der ich Abfragen mach.
COUNT(*) AS Anzahl wird wohl nur zur Erzeugung der Spalte Anzahl dienen, so wie ich das seh. Da wird doch die Gesamtanzahl der Zeilen eingetragen?
GROUP BY Key wird wohl das machen, was ich wollte, also die gleichen Keys zusammenfassen (und vermutlich entsprechend auch die Anzahlen?)
ORDER BY sortiert das ganze dann. Aber warum nochmal COUNT(*)? Das macht doch dann nochmal ne SQL-Abfrage? Warum geht da ORDER BY Anzahl DESC nicht?

So ganz hab ichs wohl noch nicht verstanden :]
Wär schön, wenn du mir da nochmal nen Schubs in die richtige Denkrichtung geben könntest!


bummi - Fr 14.10.11 15:08

Du gruppierst nach Key für die Bedingung Effekt = 0
und gibst die Anzahl der Werte für Key und Bedingung mit aus.


Kay E. - Fr 14.10.11 15:15

Hmm ok, ich glaub, das muss sich erstmal setzen, bis ich das wirklich voll verstanden hab, wie SQL funktioniert. Danke, hast mir sehr geholfen!


Xion - Fr 14.10.11 21:31

Kannst vielleicht hier mal gucken, da ist GROUP BY ganz nett erklärt:

http://www.sql-und-xml.de/sql-tutorial/group-by-zum-aggregieren-auswerten-von-daten.html