У меня есть 2 столбца, один называется rating_average и один называется rating_count.
Мне нужно выбрать 3 строки с наивысшим рейтингом с оценкой, учтенной в уравнении.
Вы можете сделать математику в порядке порядка, например:
select *
from YourTable
order by rating_average * rating_count DESC
limit 3
В MySQL вы можете добавить limit
в конце запроса, чтобы ограничить набор строк в первые N строк.
Если вы приведете пример, мы могли бы, вероятно, предоставить вам более конкретное решение.
SELECT *
FROM table
ORDER BY rating_average DESC,
rating_count DESC
LIMIT 3
Это дает первые 3 строки, отсортированные сначала по рейтингу, а затем по рейтингу_count.
Пример:
=================================
| rating_average | rating_count |
=================================
| 9.1 | 5 |
| 8.9 | 9 |
| 8.9 | 3 |
=================================
order by
подряд дают синтаксическую ошибку
Если у вас нет рейтинга rating_average и rating_count, но вы все равно хотите получить результаты, данные Andomar, вот полный запрос, используя только таблицы 'products' и 'reviews'
SELECT products.title,reviews.fk_productid,
COUNT(reviews.review_id) AS review_count,
AVG(reviews.rating) AS rating_average,
COUNT(reviews.review_id) * AVG(reviews.rating) AS total_score
FROM reviews
INNER JOIN products
ON products.product_id = reviews.fk_productid
GROUP BY fk_productid
ORDER BY total_score DESC
SELECT * FROM table ORDER BY rating_average DESC LIMIT 3
Это может сработать, но вы должны опубликовать схему, чтобы мы могли точно видеть, что вы хотите.
Как вы хотите точно учитывать рейтинг? Если вы хотите ограничить его, указав элементы с рейтингом не менее 3, вы можете сделать это:
SELECT rating_average, rating_count
FROM mytable
WHERE rating_count > 3
ORDER BY rating_average DESC
LIMIT 3
average = sum / count
[в основном]).