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 BYochGROUP BYsatser, men inte iWHEREellerHAVINGklausuler; 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