If you need only one guest per show - you can use DISTINCT ON
:
select distinct on (sh.showname) g.firstname, g.lastname, g.rating, sh.showname
from guest g, shows sh, timeslot ts
where sh.shownumber = ts.shownumber
and ts.guestnumber = g.guestnumber
order by sh.showname, g.rating desc