2015-08-07 3 views
9

отсылая к этому: Is there any difference between GROUP BY and DISTINCTGROUP BY и COUNT с помощью ActiveRecord

Given a table that looks like this: 

name 
------ 
barry 
dave 
bill 
dave 
dave 
barry 
john 
This query: 

SELECT name, count(*) AS count FROM table GROUP BY name; 
Will produce output like this: 

name count 
------------- 
barry 2 
dave 3 
bill 1 
john 1 

Как правильно Rails условность здесь ActiveModel выполнить GROUP BY с COUNT?

+0

'Table.all.group (: name) .count' –

ответ

22

Distinct и Group By собираются дать вам разные результаты. Для того, чтобы получить результаты, которые вы ожидаете вы будете использовать

Person.all.group(:name).count 
(1.2ms) SELECT COUNT(*) AS count_all, name AS name FROM "people" GROUP BY "people"."name" 
=> {"Dan"=>3, "Dave"=>2, "Vic"=>1} 

Видели выше, группа будет возвращать вещи, как хэш. В то время как различные просто возвращает количество людей в общей сложности, см. Ниже.

Person.all.distinct(:name).count 
(0.4ms) SELECT DISTINCT COUNT(DISTINCT "people"."id") FROM "people" 
=> 6