PostgreSQL Query Refactoring
If you just want to see the number of free slots, you can simplify your query using conditional aggregation:

select event_date, 
       event_start, 
       event_end,
       count(*) filter (where not status) as free_slots
from events e
group by event_date, event_start, event_end
order by event_date, event_start;


The filter() clause was introduced in Postgres 9.4. If you are still using an older version you can use a CASE statement instead:

select event_date, 
       event_start, 
       event_end,
       count(case when not status then 1 end) as free_slots
from events e
group by event_date, event_start, event_end
order by event_date, event_start;


Incidentally, status is not a very good name for the column. Something like is_taken or is_full would be better and likely cause less confusion.