【发布时间】:2020-05-24 15:21:35
【问题描述】:
我有一个这样的数据库:
题表:
QId | Title
----------
1 | SR
4 | TR
9 | AA
答案表:
RId | QId
----------
2 | 1
3 | 1
5 | 4
6 | 4
7 | 1
8 | 4
投票表:
PubId | Type
-------------
2 | P
3 | N
3 | N
1 | P
1 | N
5 | P
4 | P
2 | N
2 | P
我想计算每个问题的分数。一个问题的得分是对该问题及其所有答案的正面和负面投票之间的差异。例如,QId 为 1 的问题 1(答案为 2、3 和 7)的得分为 -1,因为它有 3 个赞成票和 4 个反对票。
到目前为止,我只能计算给定问题的分数。代码是:
SELECT P+N FROM (
SELECT sum (case WHEN Type='P' then +1 else 0 end) as P,
sum (case WHEN Type='N' then -1 else 0 end) as N
from (
SELECT v.Type from Vote v where v.PubId in (
SELECT r.RId FROM Answer r WHERE r.QId=4
UNION
select q.QId from Question q where q.QId=4)
)
)
如何计算每个问题的分数,然后将它们从分数最高的问题到分数最低的问题排序?
我想要的结果是4(得分为+2)、9(得分为0)、1(得分为-1)。
【问题讨论】:
-
pubid指的是什么? -
你如何定义积极投票和消极投票。我只看到问题 1 有 2 票赞成票和 3 票反对票
-
如果您查看答案表,@JimMacaulay 问题 1 的答案为 2,3 和 7。因此,我们查看 PubId = 1、2、3 和 7 的投票表。这给了我们 4 N 和 3 P
-
@GordonLinoff pubId 指的是 Question 表中的 QId 或 Answer 表中的 RId