Используйте LIMIT, чтобы вернуть только 10 строк, и используйте ORDER BY .. DESC, чтобы получить самые большие значения, и используйте GROUP BY, чтобы подсчитать теги вместе.
select t.tagID, t.tagName, count(*) as TimesUsed
from coupon_tags c
inner join tags t on t.tagID = c.tagID
group by t.tagID, t.tagName
order by TimesUsed DESC
limit 10;
Обратите внимание, что если есть связи для 10-го места или выше, например, 3 x 9 или 2 x 10, LIMIT 10 приведет к отображению только одного из них (случайным образом). Если вам нужно показать связи, которые простираются до 11-го места или дальше, это потребует сложного запроса. Лучшим вариантом для обработки этого было бы получить верхние 15, а затем в интерфейсе программирования идти дальше 10, пока не изменится значение TimesUsed
.