2010-08-23 2 views
0

Как я могу подсчитать количество результатов, возвращаемых «групповым» запросом, не получая данные? Пока что я получаю хэш-таблицу результатов. Возможно ли в rails3 оптимизировать этот запрос?Ruby: группировать и подсчитывать количество результатов

Vote.group("question_id, user_id").where("question_id = 3").count.count 
=> 2 

В этом случае мы делаем подсчет этого Hashtable =>{1=>10, 15=>1}

Запрос является:

SELECT COUNT(*) AS count_all, question_id, user_id AS question_id_user_id 
FROM `votes` 
WHERE (question_id = 3) 
GROUP BY question_id, user_id 
+0

Что именно вы пытаетесь найти? Общее количество голосов, которые имеют как атрибуты, question_id, так и user_id, где question_id = 3? Не уверен, что я понимаю ваш запрос. – Trip

+0

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

ответ

1

Вы можете использовать count_by_sql:

Vote.count_by_sql("select count(*) from (select 1 from Votes group by question_id, user_id)") 

Или ты может создать запрос с использованием Rails, а затем запустить его:

query = Vote.group(:question_id, :user_id).to_sql 
count = Vote.count_by_sql("select count(*) from (#{query})") 
+0

Обходной путь работает отлично. В моем тесте на mysql я также должен был назвать таблицу: 'select count (*) from (# {query}) mycount' – Gros

Смежные вопросы