Редактировать: теперь, когда я видел другие ответы, почему объединение лучше, чем использование коррелированного подзапроса? Потому что коррелированный подзапрос выполняется для каждой строки в вашей таблице. Когда вы присоединяетесь к нему, запрос выполняется только один раз.
Тогда вам нужно присоединиться к этим запросам.
select * from
table
inner join (
select first_name, count(first_name) as name_count from table group by first_name
) qcounts on table.first_name = qcounts.first_name
Также обратите внимание, что в вашем запросе вы должны удалить id
из предложения select, поскольку вы не имеете его в предложении group by и не применяете к нему агрегатную функцию. Поэтому для этого столбца возвращается случайная строка.
Хорошей идеей будет позволить MySQL напомнить вам об этом, активировав режим only_full_group_by
sql. Для этого вы можете сделать
set global sql_mode = concat(@@global.sql_mode, 'only_full_group_by');