2012-10-31 83 views
0

我有一个MySQL表,其中存储了客户的星级评定,所以不同的clientcode:MySQL的 - 选择具有最高平均

裁判,clientcode,日期,评论,明星

同样clientcode可以出现很多次。

我需要选择具有最高平均星号的不同客户端代码。任何建议如何得到这个

+0

请告诉我们你已经尝试过:) –

+1

请出示一些示例数据,什么是所需的输出 –

回答

0
SELECT 
    t1.* 
FROM 
    table t1 
WHERE 
    t1.stars IN 
    (
     SELECT 
      MAX(t2.stars) 
     FROM 
      table t2 
     WHERE 
      t2.clientcode = t1.clientcode 
    ) 
+0

这里没有平均寿。 –

0

这会显示不同的clientcode

SELECT avg(stars) from t1 group by clientcode; 
1
SELECT 
    t1.clientcode clientcode, 
    t2.sum sum, 
    t3.count count, 
    CASE t3.count WHEN 0 THEN 0 ELSE t2.sum/t3.count END average 
FROM 
    t1 
    LEFT JOIN 
    (
     SELECT 
      clientcode, 
      SUM(stars) sum 
     FROM t1 
     GROUP BY clientcode 
    ) t2 ON t1.clientcode = t2.clientcode 
    LEFT JOIN 
    (
     SELECT 
      clientcode, 
      COUNT(stars) count 
     FROM t1 
     GROUP BY clientcode 
    ) t3 ON t1.clientcode = t3.clientcode 
0

请尝试以下给出的查询恒星的平均值。

select avg(`stars`) AS `avgstar` ,`clientcode` from `t1` group by `clientcode` order by `avgstar` DESC 

这里group by clientcode将获得创纪录的在Descinding为了每个不同clientcodeorder by avgstar其中avgstar is average of stars field value for each clientcode

感谢

+0

感谢大家的建议。我用这个,因为它是最简单的(因此对我来说最简单!)。它工作出色。当我实现它时,我收集了一个数组中的结果,使我能够选择任何前5个结果,这正是我需要的结果 – David

+0

嗨,如果你喜欢这个答案,那么请将它投票并接受这个答案:) –