Du ställer två frågor:
1.
Varför kan jag inte hänvisa till SELECT-kostnadsaliaset i WHERE-satsen?
2.
Men varför beställa efter kostnad desc; är tillåtet?
Manualen har ett svar för dem båda här:
En utdatakolumns namn kan användas för att referera till kolumnens värde i
ORDER BY
ochGROUP BY
satser, men inte iWHERE
ellerHAVING
klausuler; där måste du skriva ut uttrycket istället.
Det definieras av SQL-standarden och anledningen är händelseförloppet i en SELECT
fråga. Vid tiden WHERE
satser tillämpas, utdatakolumner i SELECT
Listan har ännu inte beräknats. Men när det gäller ORDER BY
, utdatakolumner är lättillgängliga.
Så även om det här är obekvämt och förvirrande till en början, är det ändå lite vettigt.
Relaterat:
- PostgreSQL Where count condition
- Bästa sättet att få resultaträkningen innan LIMIT tillämpades