Я не уверен, что есть симпатичный Rails-способ подсчета по сгруппированным столбцам. Есть много странных способов сделать это в SQL, но этот путь достаточно прост, чтобы следовать.
Address.find(:all,
:select => "count(*) as addr_count",
:having => "addr_count > 0",
:group => 'street_name, flat_no, house_no, house_alpha').size
Это запустит следующий запрос SQL.
SELECT count(*) as addr_count FROM "addresses" GROUP BY street_name, flat_no, house_no, house_alpha HAVING addr_count > 0
Редактировать: Прочтите это для Postgres
Из комментариев ниже, вот способ сделать выше на Postgres.
Address.find(:all,
:select => "count(*)",
:having => "count(*) > 0",
:group => 'street_name, flat_no, house_no, house_alpha').size
Создает следующий запрос.
SELECT count(*) FROM "addresses" GROUP BY street_name, flat_no, house_no, house_alpha HAVING count(*) > 0