$item = mysql_query("SELECT i.*, (SELECT AVG(`rating`) FROM `rates` WHERE `item_id` = i.`id`) AS `rating` FROM `item` i ORDER BY `rating` DESC LIMIT 3");
Вы пытались запустить такой подзапрос?Я не думаю, что это был бы самый эффективный или точный способ сделать это, но он может дать базовый результат, который вы можете найти полезным.
В идеале вы должны обработать это на бэкэнде, чтобы исключить игрыстандартное отклонение) и сохраняйте постоянное среднее значение для каждого элемента, но это может быть слишком сложным для того, что вам может понадобиться.