SQL MySQL Sortierung mit GROUP BY

Schumiel

Lieutenant
Registriert
Jan. 2010
Beiträge
846
Hallo,

und zwar scheitere ich grade an einer Sortierung mit GROUP BY

Beispiel:
[sql]SELECT id, count(*) AS gesamt, best FROM test GROUP BY id ORDER BY gesamt DESC[/sql]

Soweit ist das alles ok. Es soll nach gesamt absteigend sortiert werden. Als zweite Sortierung soll der Wert "best" sortiert werden. Durch die Gruppierung wird mir hierbei immer der Wert des ersten Datensatz ausgegeben. Ich möchte aber den letzten Datensatzwert.

[sql]SELECT id, count(*) AS gesamt, best FROM test GROUP BY id ORDER BY gesamt DESC, best DESC[/sql]
... funktioniert nicht.

Ich habe es auch schon mit INNER JOIN, SUBSELECT und UNION probiert, aber ich habe keine Lösung finden können.

Weiß jemand rat?
 
Code:
SELECT id, count(*) AS gesamt, best FROM test GROUP BY id, best ORDER BY gesamt DESC, best DESC

Wenn best eine "normale" Spalte ist muss auch nach der gegrouped werden.
 
Ein Gruppenwechsel sortiert nicht, sondern gruppiert. Sagt ja schon der Name.

Wenn du nach 2 Kriterien sortieren willst, schreibe

ORDER BY Kriterium1 DESC, Kriterium2 ASC

oder so.
 
das problem scheint das du nicht weißt was du willst
daher ist keine bereit dir zu helfen.

gib doch mal bsp daten vor wie sie jetzt sind und wie du sie haben willst.
 
Ich möchte, das er nach "gesamt" sortiert und danach nach "best". Mit meinem Query sortiert er nur nach "gesamt" und "best" gar nicht.

Beispiel:

id best
1 2
1 3
1 7
2 5
1 5
3 2

Ergebnis meines Querys ...

id gesamt best
1 4 2
2 1 5
3 1 2

Und anstatt der roten 2 soll der Datensatz mit der "1 7" also der "7" drin stehen.
 
super damit kan man arbeiten hier die lösung:

Code:
SELECT id, count(*) AS gesamt, max(best) as "best" FROM test GROUP BY id, best ORDER BY gesamt DESC, best DESC
 
AlbertLast schrieb:
super damit kan man arbeiten hier die lösung:

Code:
SELECT id, count(*) AS gesamt, max(best) as "best" FROM test GROUP BY id, best ORDER BY gesamt DESC, best DESC

Ich war auch grad bisschen am rumprobieren eine Lösung zu finden..

aber deine funktioniert bei mir auch nicht.
wieso gruppierst du ID und best? das gruppiert ja nur wenn ID und best gleich sind.

LG



Ich hätt hier ne Lösung..:

Code:
SELECT ID, count(*) AS gesamt, max(best) as best
 FROM [SQLLessons].[dbo].[Test]
 GROUP BY id
 
Zuletzt bearbeitet:
Code:
SELECT a.id, b.gesamt, max(best) best FROM test a, (SELECT id, count(*) FROM test i where i.id = a.id) b
WHERE a.id = b.id
GROUP BY a.id
ORDER BY b.gesamt DESC, best DESC

Ist nicht getestet, aber so in die Richtung sollte es funktionieren.
 
das mit dne group hatte ich über sehn
Code:
SELECT id, count(*) AS gesamt, max(best) as "best" 
FROM test 
GROUP BY id
ORDER BY gesamt DESC, best DESC

man braucht hier für kein subquery oder ähnliches
 
SELECT id, count(*) AS gesamt, max(best) as "best"
FROM test
GROUP BY id
ORDER BY gesamt DESC, best DESC
Juhu, das ist die beste Lösung.

Vielen Dank, das beim Nachhaken so reichhaltig geholfen wurde. Top und danke! *freu*
 
Zurück
Oben