Rüdiger: mysql abfrage

hallo an alle

hab mal eine mysql frage bin da nicht so fit
Der Schwabe hat vor einigen wochen mal das gleiche gepostet
und so sollte es eigentlich gehn laut dem posting
bei mir allerdings nicht!!!
bekomme von mysql immer diese fehlermeldung:
Unknown column 'PI' in 'field list'
was mache ich falsch??

SELECT Name, sum(Spiel) AS SP , sum(Tore) AS TO, AVG(TO / SP) AS neu  FROM Spiele GROUP BY Name ORDER BY neu DESC

danke und grüße Rüdiger

  1. Huhu Rüdiger

    Unknown column 'PI' in 'field list'

    Dein SQL-Statement enthält eine unbekannte Spalte PI

    SELECT Name, sum(Spiel) AS SP , sum(Tore) AS TO, AVG(TO / SP) AS neu  FROM Spiele GROUP BY Name ORDER BY neu DESC

    mmm, in diesem SELECT gibt es kein PI, finde also zunächst
    mal heraus wo genau der Fehler auftritt.

    Viele Grüße

    lulu

  2. SELECT Name, sum(Spiel) AS SP , sum(Tore) AS TO, AVG(TO / SP) AS neu  FROM Spiele GROUP BY Name ORDER BY neu DESC

    Hallo Rüdiger,

    dem was lulu sagte, würde ich noch hinzufügen, daß man es vermeiden sollte, reservierte Begriffe als Spaltenbezeichner zu nutzen - in Deinem Fall "TO". Besser sähe die Query zum Beispiel so aus:

    SELECT Name, SUM(Spiel) AS SumSpiel , SUM(Tore) AS SumTore, AVG(TO/SP) AS AvgToreProSpiel
        FROM Spiele
        GROUP BY Name
        ORDER BY neu DESC

    HTH Robert

    1. Wenn, dann richtig:

      SELECT Name, SUM(Spiel) AS SumSpiel , SUM(Tore) AS SumTore, AVG(SumTore/SumSpiel) AS AvgToreProSpiel
           FROM Spiele
           GROUP BY Name
           ORDER BY AvgToreProSpiel DESC

    2. hallo lulu und Robert

      SELECT Name, SUM(Spiel) AS SumSpiel , SUM(Tore) AS SumTore, AVG(TO/SP) AS AvgToreProSpiel
          FROM Spiele
          GROUP BY Name
          ORDER BY neu DESC

      hab das jetzt mal umgeschrieben
      der fehler war von einer anderen abfrage die allerdings das gleiche ziel hat (sorry mein fehler). jetzt aber die richtige fehlermeldung:
      Unknown column 'SumTore' in 'field list'
      und die abfrage dazu:
      SELECT Name, sum(Spiele) AS SumSpiele , sum(Tore) AS SumTore, AVG(SumTore / SumSpiele) AS AVGToreProSpiel FROM Spiele GROUP BY Name ORDER BY AVGToreProSpiel  DESC

      hoffe jetzt ists für die helfenden klarer

      grüße Rüdiger

      1. Hi Rüdiger,

        der fehler war von einer anderen abfrage die allerdings das gleiche ziel hat (sorry mein fehler). jetzt aber die richtige fehlermeldung:
        Unknown column 'SumTore' in 'field list'
        und die abfrage dazu:
        SELECT Name, sum(Spiele) AS SumSpiele , sum(Tore) AS SumTore, AVG(SumTore / SumSpiele) AS AVGToreProSpiel FROM Spiele GROUP BY Name ORDER BY AVGToreProSpiel  DESC

        das Problem liegt wohl in der Schachtelung der Aggregatfunktionen. Es machte auch wenig Sinn, die AVG()-Aggregation auf alle Spaltensummen der jeweiligen Gruppen auszuführen. Den Durchschnittswert der Tore pro Spiele liefert Dir der Quotient aus SumTore und SumSpiele bilden - auf dieses Detail habe ich eben nicht geachtet.

        So könnte es gehen:

        SELECT Name, SUM(Spiele) AS SumSpiele, SUM(Tore) AS SumTore, SumTore/SumSpiele AS AvgToreProSpiel
            FROM Spiele
            GROUP BY Name
            ORDER BY AVGToreProSpiel DESC

        HTH Robert

        1. Sorry, wenn ich immer zweimal antworte, aber das blöde Forums-Monster bietet mir keine Vorschau meiner Antworten an, und ich sehe die Fehler immer erst, wenn es zu spät ist...

          SELECT Name, SUM(Spiele) AS SumSpiele, SUM(Tore) AS SumTore, SumTore/SumSpiele AS AvgToreProSpiel
              FROM Spiele
              GROUP BY Name
              ORDER BY AVGToreProSpiel DESC

          Womöglich hat MySQL ein Problem mit der Verwendung von Spaltenaliasen (oder was ist der Plural von Alias?) in anderen Spaltenausdrücken. Dann muß man - abhängig vom Optimierer mit Performanceverlust - mit mehrfacher Aggregation arbeiten:

          SELECT Name, SUM(Spiele) AS SumSpiele, SUM(Tore) AS SumTore, SUM(Tore)/SUM(Spiele) AS AvgToreProSpiel
              FROM Spiele
              GROUP BY Name
              ORDER BY 3 DESC

          HTH Robert

          1. hallo Robert

            ohne AVG, das wars
            vielen, vielen dank für Deine hilfe

            SELECT Name, SUM(Spiele) AS SumSpiele, SUM(Tore) AS SumTore, SUM(Tore)/SUM(Spiele) AS AvgToreProSpiel
                FROM Spiele
                GROUP BY Name
                ORDER BY 3 DESC

            HTH Robert

            grüße Rüdiger

            1. ohne AVG, das wars
              vielen, vielen dank für Deine hilfe

              Hi Rüdiger,

              vielen Dank, daß ich etwas über die Aggregatfunktionen von MySQL lernen konnte. Aus anderen SQL-Welten kommend und ohne jegliche MySQL-Erfahrung bringt mich sowas weiter; mal wieder ein schönes Beispiel für Win-Win-Situationen in Foren!

              Gruß

              Robert