mySQL Abfrage, wie komme ich an den höchsten Wert ran?
Alex
- datenbank
0 Daniela Koller0 Cheatah0 Alex
Hallo,
ich habe folgende Tabelle "Test":
| TID | TEXT | VERFASSER |
Ich hätte gerne den Verfasser mit der grössten Anzahl an Texten.
Angefangen habe ich mit:
select count(*) AS Anzahl from TEST group by VERFASSER
Das bringt schonmal die Anzahl der Texte pro Verfasser. Mein Problem besteht nun darin, dass ich aus der neuen Spalte "ANZAHL" nicht den max. Wert auslesen kann. Egal was ich versucht habe -> ich bekomme immer Fehler. Ich hätte es mit einer View gemacht, das wäre sehr einfach, denn dann könnte ich in einer 2. Abfrage der View einfach mit max(Anzahl) den gewünschten Datensatz bekommen. In mySQL gibt es leider keine VIEWS (zumindest in meiner Version).
Versucht habe ich:
select count(*) AS Anzahl from TEST where max(ANZAHL) group by VERFASSER
oder:
select count(*) AS Anzahl from TEST group by VERFASSER HAVING max(ANZAHL)
und natürliche diverse Abwandlungen davon usw.
Welche Möglichkeiten bietet mySQL für sowas?
Scheint aber grundlegend ein Denkfehler von mir zu sein. Für Anregungen und Lösungsansätze wäre ich dankbar. Evtl. Syntaxfehler bleiben mal aussen vor, da ich hier in erster Linie nur das Problem darstellen will.
Gruß,
Alex
Hi Alex
ich habe folgende Tabelle "Test":
| TID | TEXT | VERFASSER |
Ich hätte gerne den Verfasser mit der grössten Anzahl an Texten.
versuch es mal mit:
Select max(*) as anzahl, verfasser
from tabelle
group by verfasser
order by anzahl desc limit 0,1
Achtung, ungestestet.
Die Idee dahinter ist, du holst dir wie in deinem SQL zu jedem
Verfasser die Anzahl Einträge, die sortierst du nachher nach
der Anzahl und zwar absteigen dass die höchste Zahl zuerst kommt.
Aus der Liste nimmst du mit limit 0,1 dann den ersten raus. Vorsicht
limit 1 funktioniert allermindestens bei älteren Mysqlversionen nicht
da der Optimizer erst limitiert und danach sortiert.
Einfacher ginge das ganze mit Subselect, hoffentlich dann bei MySQL 4.
Gruss und hoffe das funktioniert
Daniela
Hi,
select count(*) AS Anzahl from TEST group by VERFASSER
order by Anzahl
Egal was ich versucht habe -> ich bekomme immer Fehler.
Welche? Ohne Fehlerbeschreibung ist das nutzlos.
where max(ANZAHL)
Was soll mit max(ANZAHL) sein? Die WHERE-Klausel enthält Bedingungen, keine Hinweise.
HAVING max(ANZAHL)
Hierfür gilt das gleiche. Gültig wäre z.B. "HAVING max(ANZAHL) = 1" - wobei dies für jeden Verfasser separat ermittelt wird, wegen GROUP BY.
Welche Möglichkeiten bietet mySQL für sowas?
ORDER BY und LIMIT. Andere DBMSse können zudem mit Subselects u.ä. agieren.
Scheint aber grundlegend ein Denkfehler von mir zu sein.
Ein grundlegendes Missverständnis dessen, was in der WHERE-Klausel steht :-) und was bei GROUP BY passiert (nämlich werden "virtuelle Untertabellen" erzeugt, auf die die Gruppenfunktionen und die HAVING-Klausel angewandt werden).
Cheatah
Hallo,
ich wollte mich nur nochmal für die kompetenten Antworten bedanken. Hat mir gut geholfen und klüger bin ich jetzt auch noch geworden bzw. wissender. :)
Danke.