Versione testata e funzionante
User.select(:first,:email).group(:first,:email).having("count(*) > 1")
Inoltre, questo è un po' indipendente ma utile. Se vuoi vedere come è stata trovata ogni combinazione, metti .size alla fine:
User.select(:first,:email).group(:first,:email).having("count(*) > 1").size
e otterrai un risultato impostato indietro simile a questo:
{[nil, nil]=>512,
["Joe", "example@sqldat.com"]=>23,
["Jim", "example@sqldat.com"]=>36,
["John", "example@sqldat.com"]=>21}
Ho pensato che fosse piuttosto interessante e non l'avevo mai visto prima.
Ringraziamo Taryn, questa è solo una versione modificata della sua risposta.