Ну для начала надо правильно сделать JOIN таблиц cabs и trips. Для лучшего понимания советую посмотреть, что возвращает:
SELECT * FROM cabs,trips;
Как это исправить рассказывать я уже рассказывать не буду - это элементарные основы.
Далее, не надо писать COUNT на что попало, нужно чётко понимать, что должен делать запрос. В данном случае если не использовать группировку, запрос должен извлечь из базы все строки по принципу:
компания1 ... поездка1
компания1 ... поездка2
компания2 ... поездка1
... итд
Нужно сгруппировать по компании, а поездки агрегировать функцией их количества, например, так:
SELECT company_name, COUNT(*) AS trips_amount ... GROUP BY company_name;
В SQL при использовании агрегирующих функций все неагрегированные столбцы надо завести в GROUP BY. В некоторых случаях можно обойтись фиктивной агрегацией. Например, если мы хотим вместе с компанией выводить её адрес, который у всех строк и так будет одинаковый, можно сделать так:
SELECT company_name, MIN(company_address), ... GROUP BY company_name;
Хотя разумнее так (и заодно всплывут различия в компаниях с одним распространённым именем типа ООО "Вектор" и разными адресами):
SELECT company_name, company_address, ... GROUP BY company_name, company_address;
И в конце всё это надо отсортировать. Некоторые базы типа MySQL позволят сделать ORDER BY trips_amount DESC, а вот в Oracle, например, нельзя использовать тут алиасы, придётся сделать ORDER BY COUNT(*) DESC.