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;
You haven't said which DBMS you are using, and how to get the first ten rows in the result depends on that. If it is SQL Server, just add "top 10" after "select". If it is MySQL, add "limit 0, 10" at the end of the query. Other systems may require other ways of expressing it.
One more detail: If the column "rating" has type integer, you may (depending again on which system you are using) have to replace "avg(rating)" with "avg(1.0 * rating)" if you want decimals in your averages.
To write a query like this, it is often easiest to think step by step, and try each step. First, join the two tables, so you have all the data you need in one big table:
select *
from tb_customers join tb_rating on tb_customers.cust_id = tb_rating.cust_id;
Try to run it with your data, so you see that the result is what you would expect. Then, calculate the average for each customer, using "avg" and "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;
Run that too. Then add the "order by" as shown above, and finally how to get the first ten rows.