【发布时间】:2011-04-26 02:07:53
【问题描述】:
当前“尝试”表:
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 个问题。
因此,我的问题是:如何做到这一点?我的最终目标是在 Rails 中做到这一点,但首先我想尝试一下 postgresql。那么你知道怎么做吗?代码示例高度赞赏。
问候,
莫里斯
// 更新
好的,我尝试将您的建议付诸实践,但我遇到了问题。正如你所看到的,我只是得到 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
好的,我做了一个嵌套选择来解决这个问题(灵感来自How to JOIN a COUNT from a table, and then effect that COUNT with another 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) 做一些事情,但这似乎没有成功。关于如何做到这一点的任何想法?
再次感谢
【问题讨论】:
标签: sql postgresql