MySQL 查询计算评级总和


mysql query calculate rating sum

>我有下表

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;

上记录的基本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
  • SQLFiddle 演示
SELECT
    rating,
    COUNT(rating) as Count
FROM rating
GROUP BY rating