Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hinzufügen von MySQL-Aliasfeldern zusammen

Hier ist die Reihenfolge, wie Dinge in einer Datenbank-Engine ausgeführt werden.

Beachten Sie, dass dies eine semantische Darstellung dessen ist, wie Dinge ausgeführt werden, die Datenbank kann Dinge in einer anderen Reihenfolge tun, aber sie muss Ergebnisse produzieren, als ob es auf diese Weise getan würde.

  1. Zunächst wird der FROM-Teil ausgewertet, woher bekomme ich Daten
  2. Dann wird der WHERE-Teil ausgewertet, welche Zeilen uns interessieren
  3. Dann wird der GROUP BY-Teil ausgewertet, wie kombinieren wir die resultierenden Zeilen
  4. Dann wird im HAVING-Teil ausgewertet, für welche Gruppen wir uns interessieren
  5. Dann wird der ORDER BY-Teil ausgewertet, in welcher Reihenfolge wollen wir diese Zeilen/Gruppen
  6. Schließlich wird im SELECT-Teil ausgewertet, welche Spalten uns interessieren

Einige Datenbank-Engines erlauben es Ihnen jedoch, dies zu umgehen, indem Sie "GROUP BY 2" sagen, um nach der zweiten Spalte im SELECT-Teil zu gruppieren, aber wenn Sie sich an die obige Reihenfolge halten, sollten Sie jetzt wissen, warum Ihr Code dies tut Nicht funktioniert ist, dass es (noch) keine Spalten mit den Namen total oder total2 gibt.

Mit anderen Worten, Sie müssen entweder die beiden Ausdrücke wiederholen oder einen anderen Weg finden, dies zu tun.

Was Sie tun können, ist eine Unterabfrage zu verwenden (vorausgesetzt, Sie verwenden eine MySQL-Version, die dies unterstützt):

SELECT total, total2, total+total2 as grandtotal
FROM (
    SELECT sum(EXPR) as total, sum(EXPR) as total2
    FROM tablename
    ) x

Den Rest gemäß Kommentar streichen.

Ich weiß jedoch nicht viel über MySQL, daher müssen Sie möglicherweise die Unterabfrage mit einem Alias ​​versehen:

...

    FROM tablename
    ) AS x
      ^-+^
        |
        +-- add this

Einige Datenbank-Engines verbieten auch die Verwendung des Schlüsselworts AS beim Aliasing von Unterabfragen. Wenn das Obige also nicht funktioniert, versuchen Sie Folgendes:

...

    FROM tablename
    ) x
      ^
      |
      +-- add this