Текущая таблица «Попытки»:
ID QUESTION_ID CORRECT
1 1 FALSE
2 2 TRUE
3 4 FALSE
4 3 FALSE
5 1 TRUE
6 1 TRUE
7 4 TRUE
8 3 TRUE
9 4 FALSE
10 1 TRUE
11 2 TRUE
11 1 FALSE
11 3 FALSE
Текущая таблица «Вопросов»:
ID ANSWER
1 A
2 A
3 B
4 C
5 C
6 C
7 C
Теперь я хочу заказать Вопросы в зависимости от того, сколько раз они решены. Как видите, Вопрос 1 был решен 3 раза, а Вопрос 5, 6 и 7 - 0 раз.
После того, как я сделаю этот заказ, я хочу выбрать топ-5 вопросов с наименьшим количеством решенных вопросов.
Поэтому мои вопросы таковы: как это сделать? Моя конечная цель - сделать это в рельсах, но сначала я хочу немного поэкспериментировать с postgresql. Так ты знаешь, как это сделать? Примеры кода высоко ценятся.
С уважением,
Maurice
// ОБНОВЛЕНИЕ
Хорошо, я пытался применить ваш совет на практике, но я столкнулся с проблемой. Как вы можете видеть, я просто получаю 1 строку, я думаю, из-за предложения where. Может ли быть так, что я считаю это неправильно?
=# select q.id, count(q.id)
-# from questions as q
-# left join attempts as a on a.question_id = q.id
-# where a.correct = true and a.user_id = 4
-# group by q.id
-# order by count(q.id) desc
-# limit 20
-# \g
id | count
-----+-------
112 | 2
(1 row)
// ОБНОВЛЕНИЕ 2
хорошо, я сделал вложенный выбор, чтобы решить эту проблему (вдохновленный Как присоединиться к COUNT из таблицы, а затем выполнить этот COUNT с другим JOIN ):
select q.id, temp.Count
from questions as q
left join
(select q.id, count(a.id) as count
from questions as q
left join attempts as a
on a.question_id = q.id
where a.correct = true and a.user_id = 4
group by q.id)
temp on temp.id = q.id
Дали мне кое-что: важный список.
Теперь мне все еще нужно создать случайных 5 вопросов с наименьшим количеством отсчетов .
Сейчас я пытаюсь что-то сделать с помощью min (count), но, похоже, это не сработает. Есть идеи как это сделать?
Еще раз спасибо