You can do this with conditional aggregation. This method shows conditional use of avg()
:
select "Year", "Month",
avg(case when recommend = 'true' then 1.0 else 0.0 end) * 100 as "True %"
from Questionnaire q
group by "Year", "Month"
order by "Year", "Month";
If you actually want the "%" at the end, you need to convert the result to a string and append it.