0

我正在开发测验应用程序。我的一张桌子attempts是:

id   qid   answer
--   ---   ------
 1    42   hello
 2     7   magic
 3    42   ni hao
 4    42   ciao
 5     1   foo
 6    42   ohayo

我需要关于第 42 号问题 ( ) 的最新答案qid=42,以及关于这个问题的尝试次数。我试过了:

SELECT answer, count(*) FROM attempts WHERE qid=42 ORDER BY id DESC;

然后我才意识到ORDER BY执行之后count(*),所以我的查询在这里给出了第一次尝试的答案,而不是最新的。

我的解决方法是将其拆分为 2 个查询:

SELECT answer   FROM attempts WHERE qid=42 ORDER BY id DESC LIMIT 1;
SELECT count(*) FROM attempts WHERE qid=42;

我想知道这是否可以合并为 1 个查询?

4

1 回答 1

1

这应该会为您提供每个 qid 的 1 个结果,其中包含尝试次数以及与第一次尝试相关的答案。

SELECT A.qid, answer as FirstAnswer, B.Attempts 
FROM attempts A 
INNER JOIN (SELECT DISTINCT
    qid,
    COUNT(*) over(Partition by qid) as NumberAttempts,
    MIN(id) over(partition by qid) as First_AnswerID
    from attempts) B ON A.id = B.First_AnswerID

或者....

SELECT A.qid, A.answer as FirstAnswer, B.NumAtmps, C.FirstID FROM attempts A
INNER JOIN (SELECT qid, count(*) as NumAtmps FROM attempts group by qid) B ON A.qid = B.qid 
INNER JOIN (SELECT qid, min(id) as FirstID FROM attempts group by qid) C ON A.qid = C.qid AND A.id = C.FirstID 
于 2013-10-08T20:33:26.747 回答