Anda mengajukan dua pertanyaan:
1.
Mengapa saya tidak dapat merujuk ke alias biaya SELECT di klausa WHERE?
2.
Tapi mengapa memesan dengan desc biaya; diperbolehkan?
Manual memiliki jawaban untuk keduanya di sini:
Nama kolom keluaran dapat digunakan untuk merujuk ke nilai kolom di
ORDER BYdanGROUP BYklausa, tetapi tidak dalamWHEREatauHAVINGklausa; di sana Anda harus menuliskan ekspresinya.
Ini ditentukan oleh standar SQL dan alasannya adalah urutan kejadian dalam SELECT pertanyaan. Pada saat WHERE klausa diterapkan, kolom output di SELECT daftar belum dihitung. Tetapi ketika datang ke ORDER BY , kolom keluaran sudah tersedia.
Jadi, meski awalnya tidak nyaman dan membingungkan, ini masih masuk akal.
Terkait:
- PostgreSQL Dimana menghitung kondisi
- Cara terbaik untuk mendapatkan jumlah hasil sebelum LIMIT diterapkan