Can I Make This Query Faster?
Here are some example queries that simplify the SQL, as well as provide solutions to what you are asking.  As far as performance, you'll have to test them:

--RETURNS ALL PARENT CATEGORIES FOR A CITY
SELECT cats.parent_category 
FROM city_venues AS venues  
     JOIN venue ON venue.venue_id = venues.venue_id
     JOIN category AS cats ON venue.category_id = cats.category_id
WHERE venues.city_id = 3 

--COUNTS HOW MANY CATEGORIES IN EACH CITY
SELECT venues.city_id, COUNT(cats.parent_category)
FROM city_venues AS venues  
     JOIN venue ON venue.venue_id = venues.venue_id
     JOIN category AS cats ON venue.category_id = cats.category_id
WHERE venues.city_id = 3 
GROUP BY venues.city_id

--COUNTS THE VENUES IN EACH CATEGORY FOR A CITY 
--(Specified in the WHERE     statement)
--REMOVE THE "WHERE venues.city_id = 3" TO GET OVERALL 
--COUNT OF VENUES IN ALL CITIES
SELECT venues.city_id, cats.parent_category, COUNT(venue.venue_id)
FROM city_venues AS venues  
     JOIN venue ON venue.venue_id = venues.venue_id
     JOIN category AS cats ON venue.category_id = cats.category_id
WHERE venues.city_id = 3 
GROUP BY venues.city_id, cats.parent_category