By doing calculations off your result set, you are getting into more complex queries so you've got a few options. You could dump your data into a temp table (#tablename), table variable (@tablename), or use your select query as a table itself (WITH TableName AS (SELECT * FROM TableName). I chose to do it using the with clause.

SQL

WITH ResultSet AS ( SELECT DISTINCT r.rate As Rate, f.bfid as BFid, CASE WHEN r.rate = '1' THEN '100' WHEN r.rate = '2' THEN '75' WHEN r.rate = '3' THEN '50' WHEN r.rate = '4' THEN '25' END AS Translated_Rate FROM bthfac AS f,batch b,facfeedback r WHERE f.facid= '60,75,6' and f.Bthid=b.Bthid and r.bfid = f.bfid and b.class= 'PST' and year(b.examdate)= '2011' and month(b.examdate)= '10' ) SELECT *, (SELECT SUM(CAST(Rate as float)) / COUNT(*) FROM ResultSet WHERE BFid = '72') FROM ResultSet

This "should" work. With what i was able to manage with your schema in replicating it...i swapped out table names/and i dont know data types so thats why i say "should". The CAST Rate as Float is there since i dont know if you have rate as an integer/float/or a varchar in your db.