Я не уверен, почему вы используете левые соединения.Если в каждой поездке есть аэропорт, а в каждом аэропорту есть страна, и внутреннее объединение даст вам точные результаты.
Я бы сделал следующее:
select a.ID as AirportID, a.Name as AirportName, c.Name as CountryName, count(t.id) as NumTrips
from Trips t
inner join Airports a on t.AirportID = a.ID
inner join Countries c on a.CountryID = c.ID
where t.Date >= @StartDate
and t.Date <= @EndDate
group by AirportID, AirportName, CountryName
order by NumTrips
limit 10
Замените@StartDate и @EndDate с вашими соответствующими значениями.
Не уверен, что вы ищете в результатах, но я ожидаю, что вы хотите больше всего поездок.В этом случае вы захотите сделать «заказ по NumTrips desc».Сначала будут показаны самые высокие значения, тем более что вы ограничиваете его до 10.
Кроме того, я предлагаю вам переименовать столбец «Дата» во что-то, что не будет конфликтовать с зарезервированными словами SQL.Я обычно использую «DateCreated» или «DateOfTravel» или что-то в этом роде.
Если я сделал какие-то неверные предположения, дайте мне знать, и я могу переписать это.1017 * Для индексов создайте их на полях, по которым вы будете искать.Другими словами, первичные ключи (которые всегда должны быть проиндексированы), внешние ключи, и в этом случае похоже, что столбец Date будет другим важным индексом.Однако, если вы планируете поиск по названию аэропорта, добавьте туда индекс.Я думаю, вы видите, куда это идет и т. Д.