sql >> Databasteknik >  >> RDS >> Mysql

Lägga till MySQL-aliasfält tillsammans

Här är ordningen för hur saker och ting exekveras i en databasmotor.

Observera att detta är en semantisk bild av hur saker exekveras, databasen kan göra saker i en annan ordning, men den måste ge resultat som om det gjordes på detta sätt.

  1. Först utvärderas FROM-delen, varifrån får jag data
  2. Då utvärderas WHERE-delen, vilka rader är vi intresserade av
  3. Då utvärderas GROUP BY-delen, hur kombinerar vi de resulterande raderna
  4. Då utvärderas HAVING-delen, vilka grupper vi är intresserade av
  5. Då utvärderas ORDER BY-delen, vilken ordning vill vi ha dessa rader/grupper
  6. Slutligen utvärderas SELECT-delen, vilka kolumner är vi intresserade av

Vissa databasmotorer låter dig dock kringgå detta genom att säga "GROUP BY 2" för att gruppera efter den 2:a kolumnen i SELECT-delen, men om du håller dig till ovanstående ordning bör du veta vid det här laget att anledningen till att din kod inte Det fungerar inte är att det inte finns några kolumner med namnen total eller total2 (ännu).

Med andra ord måste du antingen upprepa de två uttrycken eller hitta ett annat sätt att göra det på.

Vad du kan göra är att använda en underfråga (förutsatt att du använder en MySQL-version som stöder detta):

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

Stryker resten enligt kommentaren.

Jag kan dock inte mycket om MySQL så du kanske måste alias underfrågan:

...

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

Vissa databasmotorer tillåter inte heller användning av nyckelordet AS vid aliasing av undersökningar, så om ovanstående inte fungerar, prova detta:

...

    FROM tablename
    ) x
      ^
      |
      +-- add this



  1. Är det möjligt att infoga data i en MySQL-vy?

  2. Varför får jag java.lang.AbstractMethodError när jag försöker ladda en blob i db?

  3. hur får man en detaljerad felrapport när ett php-mysql-skript misslyckas?

  4. Inkluderar MS SQL Servers mellan intervallgränserna?