Сортировать по наивысшей средней оценке

У меня есть таблица под названием ranks которая хранит значение 1-7 и связывает его с идентификатором item и user .

Пример: id | userid | value | itemid id | userid | value | itemid id | userid | value | itemid .

Чтобы отобразить рейтинг элемента, я вычисляю сумму всех значений (1-7), где itemid=? и разделите его на общее количество строк. Но у меня нет значения, хранящегося в самой таблице items .

Получить средний рейтинг:

  // total $stmt = $conn->prepare("SELECT SUM(value) as total FROM ranks WHERE itemid=?"); $stmt->bind_param("i", $id); $stmt->execute(); $stmt->bind_result($total); $stmt->fetch(); $stmt->close(); // num of rows $stmt = $conn->prepare("SELECT COUNT(value) FROM ranks WHERE itemid=?"); $stmt->bind_param("i", $id); $stmt->execute(); $stmt->bind_result($count); $stmt->fetch(); $stmt->close(); $avg = $total/$count; 

Но я понятия не имею, как сортировать по самому высокому рейтингу, если у меня нет рейтинга, хранящегося в самой таблице items . Возможно ли это с помощью отдельной таблицы ranks ?

Вы можете использовать avg() для получения itemid по их наивысшей оценке. Это то же самое, что и получение суммы и деление на счет:

 select avg(value), itemid from ranks group by itemid order by avg(value) desc 
 select itemid, total/cnt as avgrating from ( select itemid, sum(value) as total, count(*) as cnt from ranks group by itemid ) t order by total/cnt desc; 

Вы можете получить средний рейтинг и отсортировать его с помощью подзапроса.