具有条件的SELECT AVG子查询

时间:2019-09-20 17:25:49

标签: sql

我有以下表格:

ENV AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} ENV AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} ENV AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} teachers teacher_rating


cities 包含以下列:

teachers


teacherID,location,name,othercities,status 包含以下列:

teacher_rating


ratingId, teacherId,content,ratingNumber,created,status,userName 包含以下列:

cities


我正在尝试按他们的平均评分对所有教师(从id,nameteachers的行进行排序),这是我的php变量,带有SQL:

status=0

效果很好,唯一的问题是收视率平均值包含$q="SELECT *, AVG(pr.ratingNumber) AS rating_average FROM teachers as p LEFT JOIN teacher_rating pr ON pr.teacherId = p.teacherID WHERE p.location=(SELECT `name` FROM `cities` WHERE `id`=:location) AND p.status=0 OR p.othercities REGEXP CONCAT('[[:<:]](', :location,')( |)[[:>:]]') AND p.status=0 GROUP BY p.teacherID ORDER BY rating_average DESC "; 表中的收视率,其中teacher_rating,我希望它仅使用status=1中的值来计算平均收视率teacher_rating

我不确定如何解决此问题,谢谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如何在连接中添加pr.status = 0?

ON pr.teacherId = p.teacherID AND pr.status=0   

答案 1 :(得分:0)

您正在混合ANDOR,因此应使用括号。我想你打算:

WHERE p.status = 0 AND
      pr.status = 0 AND
      (p.location = (SELECT `name` FROM `cities` WHERE `id`=:location) OR 
       p.othercities REGEXP CONCAT('[[:<:]](', :location,')( |)[[:>:]]')
      )
相关问题