Alle spalten anzeigen,deren Argument maximal

  • Hallo Leute,
    schreibe gerade an einem C#-Programm,welches alle Attribute einer Tabelle anzeigen soll,dessen Argument maximal ist.
    Folgendes query funktioniert nicht,wie gewünscht.
    Anstatt den einzelnen Datensatz zu liefern, den er soll,werden alle Datensätze der Tabelle ausgegeben.
    Wie formuliere ich das query richtig?

    Code
    string query = "SELECT Jahr,Einwohner_Millionen,Arbeitslosenquote_Prozent,Ministerpräsident FROM " + comboBox1.Text + " GROUP BY Jahr,Einwohner_Millionen,Arbeitslosenquote_Prozent,Ministerpräsident HAVING MAX(Einwohner_Millionen)";


    auch folgendes query funktioniert nicht wie gewünscht:

    Code
    string query = "SELECT max(Einwohner_Millionen) FROM " + comboBox1.Text + " GROUP BY Einwohner_Millionen  HAVING MAX(Einwohner_Millionen)";

    2 Mal editiert, zuletzt von tklustig (14. April 2017 um 11:45)

    • Offizieller Beitrag

    Hi,

    So auf die Schnelle würde ich das über die Sortierung abfangen:

    Code
    string query = String.Format(
            "SELECT `Jahr`, `Einwohner_Millionen`, `Arbeitslosenquote_Prozent`,`Ministerpräsident` FROM `{0}` order by `Einwohner_Millionen` desc limit 1"
            , comboBox1.Text
        );

    btw. Umlaute in Tabellen-/Spaltennamen ist keine sonderlich schöne Strategie...

  • Well, bin von selber drauf gekommen.
    das Problem lag auch darin,dass ich eine ACCESS-Datenbank verwende,die kein LIMIT kennt! Löste die Abfrage wie folgt:

    Code
    string query = "SELECT TOP 1 MAX(Einwohner_Millionen) AS Einwohner_Millionen,Jahr,Arbeitslosenquote_Prozent,Ministerpräsident FROM " + comboBox1.Text + " GROUP BY Einwohner_Millionen,Jahr,Arbeitslosenquote_Prozent,Ministerpräsident HAVING MAX(Einwohner_Millionen) ORDER BY Einwohner_Millionen DESC ";
    • Offizieller Beitrag

    Ja, nur brauchst Du das ganze gruppieren doch gar nicht.
    Wenn Du nach Einwohneranzahl absteigend sortierst und mit top 1 nur den ersten ziehst, hast Du doch das Maximum bereits...

    Also eigentlich genau wie in #2, nur mit TOP 1 anstatt LIMIT 1:

    Code
    string query = String.Format(
            "SELECT TOP 1 Jahr, Einwohner_Millionen, Arbeitslosenquote_Prozent, Ministerpräsident FROM {0} ORDER BY Einwohner_Millionen DESC"
            , comboBox1.Text
        );