sql >> Databasteknik >  >> RDS >> Sqlserver

Varför kan jag inte använda ett alias för ett aggregat i en having-sats?

HAVING satsen utvärderas före SELECT - så servern känner ännu inte till det aliaset.

  1. Först produkten av alla tabeller i FROM klausul bildas.

  2. WHERE satsen utvärderas sedan för att eliminera rader som inte uppfyller sökvillkoret.

  3. Därefter grupperas raderna med hjälp av kolumnerna i GROUP BY klausul.

  4. Sedan grupper som inte uppfyller search_condition i HAVING klausulen elimineras.

  5. Därefter uttrycken i SELECT mållista för uttalanden utvärderas.

  6. Om DISTINCT nyckelord som finns i select-satsen, är dubbletter av rader nu eliminerade.

  7. UNION tas efter att varje delval har utvärderats.

  8. Slutligen sorteras de resulterande raderna enligt kolumnerna som anges i ORDER BY klausul.

  9. TOP klausul exekveras.

Hoppas detta svarar på din fråga. Det förklarar också varför aliaset fungerar i ORDER BY klausul.



  1. Exportera SQLite-frågeresultat till en CSV-fil

  2. psql:servern stängde anslutningen oväntat

  3. Django ORM-fråga GROUP BY flera kolumner kombinerade med MAX

  4. MySQL-optimerande INSERT-hastighet saktas ner på grund av index