我有以下查询,并且我尝试以显示平均评分最高的成员的顺序显示成员,如果一个以上的成员具有相同的平均评分,那么将考虑最高评分数。

这里,
成员A已被3位访客评分,平均评分为5,而
成员B被2位访问者评分,平均评分为5

因此,根据下面的查询,成员A应该首先显示,因为他的平均评分为5,并且被3个人评分,而成员B应该显示在第二位置。

但是成员B首先显示,成员A第二显示,所以这是问题。请让我知道我在查询中做错了什么。

SELECT m.*,mc.*
FROM      t_member m
LEFT JOIN tr_member_category mc ON m.memberpkid=mc.memberpkid
LEFT JOIN tr_comment c
          ON m.memberpkid=c.memberpkid
             AND c.approved='YES' AND c.visible='YES'
WHERE m.visible='YES' AND m.approved='YES'
       AND m.gender='FEMALE' AND mc.archivecatpkid=1
GROUP BY m.memberpkid
ORDER BY avg(c.ratingvalue) DESC, COUNT(c.ratingvalue) DESC


预先非常感谢您,
KRA

最佳答案

将AVG和COUNT函数从ORDER子句中移到SELECT子句中。给他们起一个好名字,然后订购。


SELECT m.*, mc.*, AVG(c.ratingvalue) AS average_rating, COUNT(c.ratingvalue) AS number_of_ratings
FROM      t_member m
LEFT JOIN tr_member_category mc ON m.memberpkid=mc.memberpkid
LEFT JOIN tr_comment c
      ON m.memberpkid=c.memberpkid
         AND c.approved='YES' AND c.visible='YES'
WHERE m.visible='YES' AND m.approved='YES'
   AND m.gender='FEMALE' AND mc.archivecatpkid=1
GROUP BY m.memberpkid
ORDER BY average_rating DESC, number_of_ratings DESC


编辑:记住聚合函数返回一个值。如果将它们放在ORDER BY子句中,它将读取“按此值排序”,而不是“按此列排序”。在编写SQL时请记住这一点。

关于php - AVG和COUNT函数在SQL查询中未提供正确的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11682850/

10-13 03:46
查看更多