select tab1.id, tab1.city, tab1.name, tab1.years from docs as tab1 inner join (select city, count(city) as count from docs group by city order by count(*) desc) as tab on tab1.city = tab.city order by tab.count desc;
Сомневаюсь, что id_category будет обеспечивать уникальность записей для данной таблицы.
Естественно нужен первичный ключ, будет это автоинкремент или нет вам решать.