Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按Id显示平均评级,并显示Id计数_Php_Mysql_Sql_Count_Average - Fatal编程技术网

Php 按Id显示平均评级,并显示Id计数

Php 按Id显示平均评级,并显示Id计数,php,mysql,sql,count,average,Php,Mysql,Sql,Count,Average,我有一个MYSQL表,我想通过产品id的计数获得平均评级 ╔════╦═════════════╦══════════╦══════════╗ ║ ID ║ product_Id ║ rating ║ status ║ ╠════╬═════════════╬══════════╬══════════╣ ║ 1 ║ 5 ║ 1 ║ 1 ║ ║ 2 ║ 5 ║ 3 ║ 1 ║ ║ 3 ║

我有一个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的评分数)

  • 3(3)
  • 4(2)
  • 4(2)
  • 我希望结果打印为,平均评级(具有相同评级的产品ID的数量)

  • 3(1)
  • 4(2)

  • 如何获得上述结果

    如果我理解,那么您需要两个级别的聚合:

    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
    

    当我用产品总数回复计数(*)时,产品计数不显示任何内容,但工作正常