Alex: mySQL Abfrage, wie komme ich an den höchsten Wert ran?

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

  1. 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

  2. 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

  3. 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.