我正在运行以下查询以了解如何获取用户'首先尝试回答第二次尝试旁边列出的问题。
SELECT
s.id AS attempt_id_first, m.id AS attempt_id_second, s.user_id
FROM
attempt s
INNER JOIN attempt m on s.user_id = m.user_id
WHERE
s.id<m.id
我最终得到了这个:
attempt_first attempt_second user_id
7 17 1
9 10 2
9 15 2
10 15 2
4 6 9
24 25 15
29 34 19
29 36 19
34 36 19
我想有一个新列,用于计算用户的尝试次数,以便:
7 17 1 1
9 10 2 3
9 15 2 3
10 15 2 3
4 6 9 1
24 25 15 1
29 34 19 3
29 36 19 3
34 36 19 3
我确信这是微不足道的,但我无法让它发挥作用。帮助任何人?
答案 0 :(得分:1)
我认为就是这样:只显示结果,并输入一个额外的计数子查询:
select
userid,
id,
(select
count('x')
from
attempt x
where
x.userid = a.userid) as attempcount
from
attempt a
如果您希望将第一次和第二次尝试保留在不同的列中,您当然可以在原始查询中嵌入子选择。
但是,这似乎不对。首先,您需要至少进行两次尝试,否则将无法显示。您可以通过将inner join
更改为left join
并将where
子句中的条件移至该连接来解决此问题。其次,“第二次尝试”不是每次发言的第二次尝试。实际上,对于每次尝试,您都会获得所有下一次尝试。看一下用户2的例子。你不小心得到三行(其中有三次尝试),但你得到尝试9和10,以及尝试9和15以及10和15. 9,15是不正确的,因为15不是随后的尝试9.用户尝试的次数越多,您获得的这些错误结果就越多。
答案 1 :(得分:0)
如果您想在下一个旁边列出一次尝试,并且计数,我会建议:
SELECT s.user_id, s.id AS attempt_id_first,
(select s2.id
from attempt s2
where s2.user_id = s.user_id and
s2.id > s.id
order by s2.id
limit 1
) as attempt_id_second,
(select count(*)
from attempt s3
where s3.user_id = s.user_id
) as totalAttempts
FROM attempt s ;
这仅列出下一次尝试的每次尝试。计数包含在最后一栏中。