Saya perlu menggunakan alias di klausa WHERE, tetapi itu terus memberi tahu saya bahwa itu adalah kolom yang tidak diketahui. Apakah ada cara untuk mengatasi masalah ini? Saya perlu memilih rekaman yang memiliki peringkat lebih tinggi dari x. Peringkat dihitung sebagai alias berikut:
sum(reviews.rev_rating)/count(reviews.rev_id) as avg_rating
sumber
HAVING
dijalankan setelah data diambil danWHERE
dijalankan sebelumnya.Entah apakah ini berfungsi di mysql tetapi menggunakan sqlserver Anda juga bisa membungkusnya seperti:
sumber
Pertanyaan ini cukup lama dan satu jawaban sudah mendapatkan 160 suara ...
Namun saya akan memperjelas ini: Pertanyaannya sebenarnya bukan tentang apakah nama alias dapat digunakan dalam
WHERE
klausa.adalah agregasi. Dalam
WHERE
klausa kami membatasi rekaman yang kami inginkan dari tabel dengan melihat nilainya.sum(reviews.rev_rating)
dancount(reviews.rev_id)
, bagaimanapun, bukanlah nilai yang kita temukan dalam catatan; itu adalah nilai yang hanya kita dapatkan setelah mengumpulkan catatan.Jadi
WHERE
tidak pantas. Kami membutuhkanHAVING
, karena kami ingin membatasi baris hasil setelah agregasi. Tidak mungkinmaupun
karenanya.
di sisi lain dimungkinkan dan sesuai dengan standar SQL. Sedangkan
hanya mungkin di MySQL. Ini bukan SQL yang valid menurut standar, karena
SELECT
klausa seharusnya dijalankan setelahnyaHAVING
. Dari dokumen MySQL:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
sumber
Jika kueri Anda statis, Anda dapat menetapkannya sebagai tampilan, lalu Anda dapat menggunakan alias tersebut di klausa where saat membuat kueri tampilan.
sumber
sumber