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

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

Susan Sarandon
Lepaskan: 2024-12-21 00:32:16
asal
634 orang telah melayarinya

Why Can't I Use an Aggregate Alias in a SQL HAVING Clause?

Mengapa saya tidak boleh menggunakan alias agregat dalam klausa HAVING?

Pertimbangkan pernyataan SQL berikut:

select col1,count(col2) as col7
from --some join operation
group by col1
having col7 >= 3 -- replace col7 by count(col2) to make the code work
Salin selepas log masuk

Kod ini menjana ralat yang menunjukkan bahawa "col7" ialah nama lajur yang tidak sah. Mengapa begitu?

Sebabnya terletak pada susunan pelaksanaan pernyataan SQL. Klausa HAVING dinilai sebelum klausa SELECT. Ini bermakna apabila klausa HAVING dinilai, alias "col7" untuk kiraan fungsi agregat(col2) belum ditakrifkan.

SQL melaksanakan pertanyaan dalam urutan berikut:

  1. Kira hasil darab Cartesian bagi semua jadual yang dinyatakan dalam klausa FROM.
  2. Tapis baris berdasarkan klausa WHERE.
  3. Kumpulkan baris berdasarkan klausa GROUP BY.
  4. Tapis kumpulan berdasarkan klausa HAVING.
  5. Nilai ungkapan dalam senarai sasaran klausa SELECT .
  6. Alih keluar baris pendua jika DISTINCT ditentukan.
  7. Lakukan kesatuan jika ada sub-pilihan.
  8. Isih baris berdasarkan klausa ORDER BY.
  9. Gunakan klausa TOP, jika ada.

Oleh itu, dalam kod yang diberikan, klausa HAVING cuba menggunakan alias "col7" sebelum ia ditakrifkan dalam klausa SELECT. Untuk menyelesaikan isu ini, anda boleh menggantikan "col7" dengan fungsi agregat itu sendiri:

select col1,count(col2)
from --some join operation
group by col1
having count(col2) >= 3
Salin selepas log masuk

Ini membenarkan klausa HAVING menilai dengan betul kiraan agregat col2.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan