[按ID显示平均评分和ID的Mysql数

问题描述 投票:0回答:1

我有一个MYSQL表,我想在其中获得带有产品ID计数的平均评分。这是表的示例。

╔════╦═══════════════╦══════════╦══════════╗
║ ID ║  product_Id   ║ rating   ║ status   ║
╠════╬═══════════════╬══════════╬══════════╣
║  1 ║ 5             ║ 1        ║        1 ║
║  2 ║ 5             ║ 3        ║        1 ║
║  3 ║ 5             ║ 4        ║        1 ║
║  4 ║ 4             ║ 3        ║        1 ║
║  5 ║ 4             ║ 5        ║        1 ║
║  6 ║ 6             ║ 4        ║        1 ║
║  7 ║ 6             ║ 4        ║        1 ║
╚════╩═══════════════╩══════════╩══════════╝

我已经完成了这段代码,但是没有得到想要的结果。

SELECT r.product_id, ROUND(AVG(r.rating),0) as avg_rating, COUNT(r.product_id) AS products_total FROM review r
                WHERE r.status = 1 
                GROUP BY r.product_id ASC

给我的结果是平均等级(同一产品ID的等级数)

  1. 3(3)
  2. 4(2)
  3. 4(2)

我希望将结果打印为平均评分(具有相同评分的产品ID的数量)

  1. 3(1)
  2. 4(2)

如何获得以上结果

php mysql sql count average
1个回答
1
投票

如果我理解的话,则需要两个级别的聚合:

SELECT avg_rating, COUNT(*)
FROM (SELECT r.product_id, AVG(r.rating) as avg_rating, COUNT(r.product_id) AS products_total
      FROM review r
      WHERE r.status = 1 
      GROUP BY r.product_id
     ) p
GROUP BY avg_rating
© www.soinside.com 2019 - 2024. All rights reserved.