1

我有以下查询,我试图按照平均评分最高的成员首先显示的顺序显示成员,如果多个成员具有相同的平均评分,则将考虑最高评分。

此处,会员 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

4

1 回答 1

0

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

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 时请记住这一点。

于 2012-07-27T07:39:06.157 回答