Autor Beitrag
Kay E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: Fr 14.10.11 13:39 
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:
ausblenden 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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 14.10.11 13:46 
versuch mal
ausblenden Quelltext
1:
2:
3:
4:
5:
SELECT Key, COUNT(*) AS Anzahl 
FROM TestTable 
WHERE Effekt = 0
Group by Key
Order by COUNT(*) DESC

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Kay E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: Fr 14.10.11 13: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 14.10.11 14:08 
Du gruppierst nach Key für die Bedingung Effekt = 0
und gibst die Anzahl der Werte für Key und Bedingung mit aus.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Kay E. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 118



BeitragVerfasst: Fr 14.10.11 14: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 14.10.11 20:31 
Kannst vielleicht hier mal gucken, da ist GROUP BY ganz nett erklärt:

www.sql-und-xml.de/s...erten-von-daten.html

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)