mysql查询计算评级总和

时间:2013-01-30 08:16:50

标签: php mysql sql count

我有下表

id item_id rating 
 1    10     1
 2    10     2
 3    10     2
 4    10     3
 5    10     3
 6    10     3
 7    10     4

如何编写查询以便我可以获得如下结果:

$ratings = array(
    1 => 1,
    2 => 2,
    3 => 3,
    4 => 1,
    5 => 0
);

我需要使用此查询编写一个php函数来计算此函数的平均评分:

$total = 0;
$count = 0;
foreach($ratings as $number=>$frequency) {
  $total += $number * $frequency;
  $count += $frequency;
}
return $total / $count;

2 个答案:

答案 0 :(得分:3)

SELECT
    rating,
    COUNT(rating) as Count
FROM rating
GROUP BY rating 

答案 1 :(得分:3)

表格中记录的基本COUNT不会产生5,因为评分中没有值5。但是,生成包含1-5值并使用LEFT JOIN加入它们的子查询将得到您想要的结果。

SELECT a.rating, COUNT(b.rating) totalCount
FROM
    (
      SELECT 1 rating UNION SELECT 2 UNION
      SELECT 3 UNION SELECT 4 UNION
      SELECT 5
    ) a
    LEFT JOIN tableName b
      ON a.rating = b.rating
GROUP BY a.rating