Die Anforderung:
ich hab wahrscheinlich ein sehr triviales Problem.
Ich suche die ID eines Maximums.Kleines Beispiel
ID|Summe
01|12
02|18
03|12(Diese Tabelle wird erst durch dir GroupBy-Funktion erstellt!)
Die Lösung soll also ID = 2 sein.
(Das Datenfeld 'ID' bezeichnet also hier überraschenderweise keine Identity, also keine Eindeutigkeit. Demzufolge missfällt uns entweder der Datenfeldname 'ID' und/oder das Datendesign.)
(RDBMS ungenannt, Anforderungslage also möglicherweise dynamischer als erforderlich. => Bei Fragen Konzepte betreffend (hier der Fall) und bei Fragen, die Probleme betreffen, immer möglichst vollständige Angaben machen, werter Fragesteller!)
Lösungsvorschläge:
select top 1
[id],
count(*) as 'Summe'
from
DT_1
group by
[id]
order by summe desc
(Funktioniert mit T-SQL, also mit MS SQL Server.)
select
id,
count(*) as 'Summe'
from
DT_1
group by
[id]
order by summe desc
limit
0, 1
(Funktioniert - soweit http://dev.mysql.com/doc/refman/5.1/de/select.html zu trauen ist - unter MySQL 5.1 (und vermutlich mit allen Versionen))
Wenn die Daten nicht in DT_1 ("Datatable 1") liegen, sondern per Abfrage erst einmal zu ermitteln sind, bspw. aus einer DT_2 mit den Datensätzen:
ID|ranking
1|5
2|3
3|5
1|5
2|8
3|1
1|4
So schlagen wir ein
SELECT TOP 1
[id],
Summe
FROM
(
select
[id],
sum(ranking) as 'Summe'
from
DT_2
group by
[id]
) DT_1
GROUP BY
[id],
Summe
ORDER BY
Summe DESC
vor; funktioniert mit MS SQL Server SQL, für MySQL die SELECT-Syntax wie oben beschrieben anpassen.
Allerdings spricht unseres Erachtens nichts gegen:
SELECT TOP 1
[id],
sum(ranking) as 'Summe'
FROM
DT_2
GROUP BY
[id]
ORDER BY
Summe desc
All das alles unter der Annahme, dass versucht wird auf exakt einer Tabelle (Name: 'ranking', in den Beispielen oben als 'DT_1' bzw. 'DT_2' benannt) herumhühnernd Informationen zu gewinnen.