คำถามนี้ค่อนข้างเก่าและหนึ่งคำตอบได้รับ 160 คะแนน ...
ฉันจะอธิบายให้ชัดเจน: คำถามนี้ไม่ได้เกี่ยวกับว่าสามารถใช้ชื่อนามแฝงในWHERE
ประโยคได้หรือไม่
sum(reviews.rev_rating) / count(reviews.rev_id) as avg_rating
เป็นการรวมตัว ในWHERE
ประโยคเรา จำกัด ระเบียนที่เราต้องการจากตารางโดยดูที่ค่าของพวกเขา sum(reviews.rev_rating)
และcount(reviews.rev_id)
อย่างไรก็ตามไม่ใช่ค่าที่เราพบในบันทึก เป็นค่าที่เราได้รับหลังจากการรวมระเบียนเท่านั้น
ดังนั้นจึงWHERE
ไม่เหมาะสม เราต้องการHAVING
เนื่องจากเราต้องการ จำกัด แถวผลลัพธ์หลังจากการรวม มันไม่สามารถ
WHERE avg_rating > 10
ไม่
WHERE sum(reviews.rev_rating) / count(reviews.rev_id) > 10
ด้วยเหตุนี้
HAVING sum(reviews.rev_rating) / count(reviews.rev_id) > 10
ในทางกลับกันเป็นไปได้และสอดคล้องกับมาตรฐาน SQL แต่ทว่า
HAVING avg_rating > 10
เป็นไปได้เฉพาะใน MySQL ไม่ใช่ SQL ที่ถูกต้องตามมาตรฐานเนื่องจากSELECT
ประโยคควรได้รับการดำเนินการหลังจากHAVING
นั้น จากเอกสาร MySQL:
ส่วนขยาย MySQL อื่นเป็น SQL มาตรฐานอนุญาตให้มีการอ้างอิงในส่วนคำสั่ง HAVING กับนิพจน์นามแฝงในรายการที่เลือก
ส่วนขยาย MySQL อนุญาตให้ใช้นามแฝงใน HAVING clause สำหรับคอลัมน์รวม
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html