Когда я использую User.count(:all, :group => "name")
, я получаю несколько строк, но это не то, что я хочу. Я хочу, чтобы подсчет строк. Как я могу получить его?
Как подсчитать группу по строкам в рельсах?
Ответ 1
В настоящее время (18.03.2014
- Rails 4.0.3
) это правильный синтаксис:
Model.group("field_name").count
Он возвращает хеш с подсчетом как значения например.
SurveyReport.find(30).reports.group("status").count
#=> {
"pdf_generated" => 56
}
Ответ 2
-
User.count
предоставит вам общее количество пользователей и переведёт на следующий SQL:SELECT count(*) AS count_all FROM "users"
-
User.count(:all, :group => 'name')
предоставит вам список уникальных имен вместе со своими подсчетами и переводит на этот SQL:SELECT count(*) AS count_all, name AS name FROM "users" GROUP BY name
Я подозреваю, что вы хотите вариант 1 выше, но я не понимаю, что именно вы хотите/нуждаетесь.
Ответ 3
Возможно, вы хотите подсчитать отличное имя пользователя?
User.count(:name, :distinct => true)
вернет 3, если у вас есть пользователь с именем John, John, Jane, Joey (например) в базе данных.
________
| name |
|--------|
| John |
| John |
| Jane |
| Joey |
|________|
Ответ 4
Попробуйте использовать User.find(: all,: group = > "name" ). count
Удачи!
Ответ 5
Я нашел странный способ, который, кажется, работает. Для подсчета строк, возвращаемых из групповых подсчетов.
Пример таблицы пользователя
________
| name |
|--------|
| Bob |
| Bob |
| Joe |
| Susan |
|________|
Считает в группах
User.group(:name).count
# SELECT COUNT(*) AS count_all
# FROM "users"
# GROUP BY "users"."name"
=> {
"Bob" => 2,
"Joe" => 1,
"Susan" => 1
}
Количество строк из числа в группах
User.group(:name).count.count
=> 5
Что-то хаки
Вот кое-что интересное, с чем я столкнулся, но он довольно хакерский, поскольку он добавляет счетчик к каждому ряду и не слишком хорошо играет на активной земле записи. Я не помню, смог ли я получить это в запросе Arel/ActiveRecord.
SELECT COUNT(*) OVER() AS count, COUNT(*) AS count_all
FROM "users"
GROUP BY "users"."name"
[
{ count: 3, count_all: 2, name: "Bob" },
{ count: 3, count_all: 1, name: "Joe" },
{ count: 3, count_all: 1, name: "Susan" }
]