У меня такой запрос:
select titles.* from titles left join quotes on quotes.title_id = titles.id where titles.type = 4 order by titles.slug DESC
Это возвращает несколько повторяющихся записей заголовков. Я хотел бы посчитать, сколько существует дубликатов title.slugs, и отсортировать их от большего к меньшему.
Как я мог этого добиться?
Примеры данных с ожидаемым результатом помогут






Используйте комбинацию group by с order by aggregate:
SELECT titles.*
FROM titles
LEFT JOIN quotes
ON quotes.title_id = titles.id
WHERE titles.type = 4
GROUP BY titles.slug
ORDER BY COUNT(titles.slug) DESC
если вам нужно использовать счетчик дубликатов, добавьте что-то вроде этого в свой оператор select:
COUNT(titles.slug) as duplicate_title_count
Кроме того, здесь нет смысла присоединяться к столу .. или вы планируете что-то из этого выбрать?
Идея заключалась в том, чтобы извлечь экземпляры, в которых использовался внешний ключ. Левое соединение гарантирует, что внешний ключ не равен нулю. Остальное делается с помощью COUNT, GROUP BY и HAVING,
Вот так:
select titles.*, count(*) as n from titles left join quotes on quotes.title_id = titles.id where titles.type = 4 GROUP BY slug HAVING n > 1 order by n DESC
Какова цель присоединения к таблице
quotes. Кажется, вы его нигде не используете!