我在编写查询时遇到了一个真正的问题,我需要解决这个问题。问题是:
对于多个测验中的每个问题,请列出以下内容: 问题ID, 第一次测验的测验日期, 在第一次测验中选择答案A的学生人数, 第二个测验的测验日期, 以及在第二次测验中选择答案A的学生人数 问题ID应该是主要的排序键。列出的第一个测验日期应该是次要排序键。
第一个测验的列名应该是FirstQuiz。在第一个测验中选择答案A的学生人数的列名应该是FirstA。第二个测验的列名应为SecondQuiz。在第二个测验中选择答案A的学生人数的列名应为SecondA。 不要使用 内部联接 加入表的格式。
SELECT QuestionId, min(QuizDate), NumChoseA
FROM quizquestions
GROUP BY QuizNum;
正如您所看到的,我远远不能解决问题所需要的
答案 0 :(得分:0)
我至少可以把你踢向正确的方向。
select questionid, min(quizdate) as 'firstquiz'
from QuizQuestions
group by questionid
having count(1) > 1
上面的查询将获取所有questionID和他们的firstquiz日期(通过最小值)。 having子句是一个基于聚合的过滤器,在这种情况下,我们得到的所有记录都超过2条(我认为这是你的第一个要求。
第二个要求......要获得NumChoseA,我们需要将上述查询加入到quizquestions(这是我之前提到的自连接)。
select a.questionID, a.firstquiz, b.numchosea
from (qry above) a
inner join quizquestions b on a.questionid = b.questionID and a.firstquiz = b.quizdate
看看它是如何工作的?如果您有最小/最大聚合语句,则需要确保该组仅包含您希望对其进行分组的字段(在本例中为questionID)。如果我们在顶部的第一个查询中包含numchoseA,我们将按照numchoseA进行分组,并为numchooseA的每个唯一值返回一个questionID / quizdate,这是我们不想要的。 - 希望那个模糊不清......
第二位是抓住'第二'的发现。这有点困难,因为我们需要构建一个子查询来查找questionID,min(quizdate),其中不包括该问题的第一个日期。我的偏好是CTE。
希望这是一个开始......我要离开这一天...评论问题,如果你在这里,我们明天将逐步完成下一部分。