David: MySQL-Abfrage

Ich würde gerne mit MySQL aus jedem Ort die älteste Frau anzeigen wollen, kriege es aber irgendwie nicht hin:

location age sex
Ort1 28 m
Ort2 28 w
Ort2 33 w
Ort1 22 w
Ort1 83 w
Ort1 82 w
Ort2 56 w

Dann sollte rauskommen:
Ort1 83 w
Ort2 56 w

select * from tabelle where sex='w' group by location having max(age)
funktioniert leider nicht :(

Danke für Hilfe!

  1. Hallo,

    Ich würde gerne mit MySQL aus jedem Ort die älteste Frau anzeigen wollen, kriege es aber irgendwie nicht hin:

    location age sex
    Ort1 28 m
    Ort2 28 w
    Ort2 33 w
    Ort1 22 w
    Ort1 83 w
    Ort1 82 w
    Ort2 56 w

    Dann sollte rauskommen:
    Ort1 83 w
    Ort2 56 w

    Du benötigst eine korrelierte Unterabfrage.

    Freundliche Grüße

    Vinzenz

    1. Du benötigst eine korrelierte Unterabfrage.

      Was soll denn die "Unterbedingung" sein?

      1. Hallo David,

        Du benötigst eine korrelierte Unterabfrage.
        Was soll denn die "Unterbedingung" sein?

        möchtest Du nicht die älteste Person von jedem Ort haben?

        Freundliche Grüße

        Vinzenz

        1. möchtest Du nicht die älteste Person von jedem Ort haben?

          Doch, die älteste WEIBLICHE Person aus jedem Ort. Ich verstehe nicht, weshalb meine Lösung nicht funktioniert.

          1. Hallo,

            möchtest Du nicht die älteste Person von jedem Ort haben?

            Doch, die älteste WEIBLICHE Person aus jedem Ort. Ich verstehe nicht, weshalb meine Lösung nicht funktioniert.

            weil sie syntaktischer Mist ist. Jedes andere Datenbankmanagementsystem, das mir bekannt ist, wird eine Fehlermeldung ausspucken, aber kein Ergebnis liefern. Ja, ich finde das gut. Nein, ich finde das dokumentierte Verhalten von MySQL ziemlich dämlich. Es verwirrt Einsteiger wie Dich.

            Wenn Du keinen Namen benötigst, dann benötigst Du kein Subselect:

              
            SELECT           -- Gib mir  
                location,    -- den Ort  
                MAX(age),    -- den höchsten Alterswert  
                sex          -- und das Geschlecht  
            FROM             -- aus  
                tabelle      -- meiner Tabelle  
            WHERE            -- wobei nur  
                sex = 'w'    -- Frauen berücksichtigt werden sollen  
            GROUP BY         -- gruppiert  
                location,    -- nach Ort  
                sex          -- und Geschlecht  
            
            

            Möchtest Du jedoch die älteste Person unabhängig vom Geschlecht haben, dann geht das nicht mehr, wie Du dem von mir verlinkten Archivposting entnehmen kannst. Möchtest Du noch weitere Informationen wie zum Beispiel den Namen der Person oder die Anschrift ermitteln, dann geht das auch *nicht* mehr. In diesen Fällen benötigst Du eine korrelierte Unterabfrage.

            Freundliche Grüße

            Vinzenz