Rumah >pangkalan data >tutorial mysql >Mengapa Saya Tidak Boleh Menggunakan Agregat Alias ​​dalam Klausa HAVING SQL?

Mengapa Saya Tidak Boleh Menggunakan Agregat Alias ​​dalam Klausa HAVING SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-31 17:32:10867semak imbas

Why Can't I Use Aliased Aggregates in SQL's HAVING Clause?

Mengapa Agregat Beralias Dilarang dalam MEMILIKI Klausa

Dalam SQL, pengguna sering menghadapi ralat apabila cuba menggunakan alias untuk agregat dalam klausa HAVING. Ini berpunca daripada tertib khusus di mana SQL memproses pertanyaan.

Klausa HAVING, yang menapis hasil operasi GROUP BY, dinilai sebelum klausa SELECT. Akibatnya, alias yang ditakrifkan dalam klausa SELECT belum lagi tersedia semasa menilai klausa HAVING.

Untuk memahami perkara ini dengan lebih baik, mari kita pertimbangkan urutan logik pelaksanaan pertanyaan berikut:

  1. Keputusan semua jadual bercantum dalam klausa FROM terbentuk.
  2. Klausa WHERE menapis baris keluar yang tidak memenuhi kriteria carian.
  3. Baris dikumpulkan mengikut klausa GROUP BY.
  4. Kumpulan yang tidak memenuhi kriteria klausa HAVING akan dihapuskan.
  5. Fungsi agregat digunakan untuk mengira nilai agregat.
  6. Ungkapan dalam klausa SELECT ialah dinilai.

Memandangkan klausa HAVING dinilai sebelum klausa SELECT, ia tidak boleh merujuk alias yang ditakrifkan kemudian dalam pertanyaan. Sekatan ini menerangkan sebab menggunakan alias dalam klausa HAVING, seperti yang ditunjukkan dalam contoh, menghasilkan ralat "Nama lajur tidak sah".

Sebaliknya, alias berfungsi dalam klausa ORDER BY kerana klausa ORDER BY ialah dinilai selepas klausa SELECT. Oleh itu, alias yang ditakrifkan dalam klausa SELECT tersedia untuk digunakan dalam klausa ORDER BY.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Agregat Alias ​​dalam Klausa HAVING SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn