Norbert: Extremwerte und Verursacher ermitteln

Hallo,

mit "SELECT min(Temp), max(Temp) FROM Messungen;" werden Extremwerte
ermittelt. Nun soll auch noch die Messstelle ausgegeben werden:
"SELECT Messstelle, max(Temp) FROM Messungen WHERE Temp = max(Temp);"
erzeugt aber den Fehler "Falsche Verwendung einer Gruppierungsfunktion".
Versuche nach Temperatur oder Messstelle zu gruppieren, bringt nichts.
Und auch dieser Tip hat auf MySQL/4.1 keine Chance.

Hat bitte jemand den helfenden Tip ... danke ...

Gruss und Dank
Norbert

  1. mit "SELECT min(Temp), max(Temp) FROM Messungen;" werden Extremwerte
    ermittelt. Nun soll auch noch die Messstelle ausgegeben werden:
    "SELECT Messstelle, max(Temp) FROM Messungen WHERE Temp = max(Temp);"
    erzeugt aber den Fehler "Falsche Verwendung einer Gruppierungsfunktion".

    SELECT Temp AS Minimum,Messstelle FROM Messungen GROUP BY Temp ASC LIMIT 1
    SELECT Temp AS Maximum,Messstelle FROM Messungen GROUP BY Temp DESC LIMIT 1

    Versuche nach Temperatur oder Messstelle zu gruppieren, bringt nichts.

    In einer Abfrage geht das unter 4.1 imo nicht.

    JJ

    1. Moin!

      "SELECT Messstelle, max(Temp) FROM Messungen WHERE Temp = max(Temp);"
      erzeugt aber den Fehler "Falsche Verwendung einer Gruppierungsfunktion".
      SELECT Temp AS Minimum,Messstelle FROM Messungen GROUP BY Temp ASC LIMIT 1
      SELECT Temp AS Maximum,Messstelle FROM Messungen GROUP BY Temp DESC LIMIT 1

      Bringt auch nichts, weil identische Temperaturen ja auch von unterschiedlichen Messstellen gemessen werden könnten. Das GROUP BY liefert dann eine der möglichen Messstellen, aber nicht ALLE.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
  2. Hallo Norbert,

    mit "SELECT min(Temp), max(Temp) FROM Messungen;" werden Extremwerte
    ermittelt. Nun soll auch noch die Messstelle ausgegeben werden:
    "SELECT Messstelle, max(Temp) FROM Messungen WHERE Temp = max(Temp);"
    erzeugt aber den Fehler "Falsche Verwendung einer Gruppierungsfunktion".
    Versuche nach Temperatur oder Messstelle zu gruppieren, bringt nichts.
    Und auch dieser Tip hat auf MySQL/4.1 keine Chance.

    Hat bitte jemand den helfenden Tip ... danke ...

    dieses Standardproblem findest Du massenweise im Archiv und auch in der aktuellen Forumshauptdatei: https://forum.selfhtml.org/?t=165377&m=1078290.
    Stichwort: korreliertes Subselect, was mit MySQL 4.1 problemlos möglich ist.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      dieses Standardproblem findest Du massenweise im Archiv und auch in der aktuellen Forumshauptdatei: https://forum.selfhtml.org/?t=165377&m=1078290.
      Stichwort: korreliertes Subselect, was mit MySQL 4.1 problemlos möglich ist.

      hmm,
      alles ist "problemlos moeglich", wenn man weiss wie es geht ... ;-)

      Ansonsten habe ich zwischenzeitlich selbst etwas rumprobiert und festgestellt, dass Gruppieren in diesem Fall kontraproduktiv ist, weil zum Extremwert einfach eine beliebige Messstelle hinzugefuegt wird. Und so bin ich zu dieser Loesung gekommen:

      #  
      SELECT a.Messpnkt, a.Temp  
        FROM Messungen AS a  
       WHERE a.Temp = (  
             SELECT MAX(b.Temp) FROM Messungen AS b  
       );  
        
      # zur Kontrolle:  
      SELECT @aaa:=MAX(Temp) FROM Messungen;  
      SELECT Messpnkt, Temp FROM Messungen WHERE Temp = @aaa;
      

      Gruss und Dank
      Norbert

      1. Hallo

        Hallo Vinzenz,

        dieses Standardproblem findest Du massenweise im Archiv und auch in der aktuellen Forumshauptdatei: https://forum.selfhtml.org/?t=165377&m=1078290.
        Stichwort: korreliertes Subselect, was mit MySQL 4.1 problemlos möglich ist.
        hmm,
        alles ist "problemlos moeglich", wenn man weiss wie es geht ... ;-)

        wozu habe ich Dir fertigen Code für ein analoges Problem verlinkt?
        Warum habe ich Dir ein Stichwort gegeben, mit dem Du im Archiv eine Reihe
        von Beiträgen zu vergleichbaren Problemstellungen gefunden hättest?

        Ansonsten habe ich zwischenzeitlich selbst etwas rumprobiert und festgestellt, dass Gruppieren in diesem Fall kontraproduktiv ist, weil zum Extremwert einfach eine beliebige Messstelle hinzugefuegt wird. Und so bin ich zu dieser Loesung gekommen:

        das ist eine korrelierte Unterabfrage:

        SELECT a.Messpnkt, a.Temp
          FROM Messungen AS a
        WHERE a.Temp = (
               SELECT MAX(b.Temp) FROM Messungen AS b
        );

          
        wie im verlinkten Posting :-)  
        Warum hast Du noch probieren müssen?  
          
        Das "problemlos" bezog sich übrigens auf die Version MySQL 4.1. Ältere  
        Versionen von MySQL sind dazu unfähig, weil sie Subselects noch nicht  
        unterstützen.  
          
          
        Fragende Grüße  
          
        Vinzenz
        
        1. Hallo Vinzenz,

          wenn jemand ein Problem in ein Forum stellt, so entbindet ihn das IMHO nicht davon selbst nach einer Loesung zu suchen, nur dass er jetzt 'entspannter' weitermachen kann. Dabei kann es natuerlich vorkommen, dass er selbst etwas aehnliches findet, wie der Helfer im Forum und eine zeitliche Ueberschneidung ist dabei ebenfalls keine Ausnahme.

          Nun zu Deinem hilfreichen Posting:
          Vor lauter Kommentaren habe ich das eigentliche Query nicht sofort erkannt, noch dazu, wo ich meine Loesung auch schon in der Hinterhand hatte. Aber wem willst Du da eine Schuld zuweisen ... ;-)

          das ist eine korrelierte Unterabfrage:
          wie im verlinkten Posting :-)
          Warum hast Du noch probieren müssen?

          hmm,
          weil ich wie oben schon erlaeutert, mich nicht an meinem Kaffeepott festhalten kann, bis jemand etwas verwertbares postet. De haett Hummeln inn Mors, wie min Vadder seggt ... ;-)

          Gruss und Dank
          Norbert