Отображение среднего рейтинга по идентификатору с количеством идентификаторов Mysql - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть таблица MYSQL, где я хочу получить среднюю оценку с подсчетом идентификатора продукта. Вот пример таблицы.

╔════╦═════════════╦══════════╦══════════╗
║ 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)

где я хочу, чтобы результаты печатались как средний рейтинг (количество идентификаторов продуктов с одинаковым рейтингом)

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

как мне достичь вышеуказанных результатов

1 Ответ

1 голос
/ 11 апреля 2020

Если я понимаю, то вам нужны два уровня агрегации:

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
...