select tb_customers.cust_id, tb_customers.cust_name, avg(rating) as average
from tb_customers join tb_rating on tb_customers.cust_id = tb_rating.cust_id
group by tb_customers.cust_id, tb_customers.cust_name
order by average desc;
Вы не сказали, какую СУБД вы используете, и как получить первые десять строк в результате, зависит от этого. Если это SQL Server, просто добавьте «топ-10» после «select». Если это MySQL, добавьте «limit 0, 10» в конце запроса. Для других систем могут потребоваться другие способы их выражения.
Еще одна деталь: если столбец «рейтинг» имеет тип integer, вы можете (в зависимости от того, какую систему вы используете) заменить «avg (rating)» на «avg (1.0 * rating)», если вы хотите получить десятичные знаки в ваших средних значениях.
Чтобы написать такой запрос, часто проще всего шаг за шагом и попробовать каждый шаг. Во-первых, объединить эти две таблицы, так что у вас есть все необходимые данные в один большой стол:
select *
from tb_customers join tb_rating on tb_customers.cust_id = tb_rating.cust_id;
Попробуйте запустить его с вашими данными, так что вы видите, что результат можно было бы ожидать. Затем вычислите среднее значение для каждого клиента, используя «avg» и «group by»:
select tb_customers.cust_id, tb_customers.cust_name, avg(rating) as average
from tb_customers join tb_rating on tb_customers.cust_id = tb_rating.cust_id
group by tb_customers.cust_id, tb_customers.cust_name;
Запустите это тоже. Затем добавьте «порядок», как показано выше, и, наконец, как получить первые десять строк.
RDBMS? Пример данных? Ваш текущий запрос? – potashin
@Notulysses Рабочий запрос отсутствует. Я попытался изменить [this] (http://stackoverflow.com/questions/1572831/avg-of-a-sum-in-one-query) к моему делу, но это не сработало. Образец данных прост: таблица рейтингов: рейтинг - CUST_ID 4 - 1 5 - 2 3 - 1 3 - 2 клиентов Таблица: CUST_ID CUST_NAME 1 - ааа 2 - BBBB – meeteine
Обновите свой ответ, не публиковать такие вещи в комментариях. – potashin