gpt4 book ai didi

mysql - 无法理解这个 mysql 查询的逻辑意义

转载 作者:行者123 更新时间:2023-11-30 00:03:26 25 4
gpt4 key购买 nike

我在编写查询时遇到了真正的问题,我需要解决这个问题。问题是:

对于多个测验中的每一个问题,请列出以下内容:问题 ID,第一个测验的测验日期,在第一次测验中选择答案 A 的学生人数,第二次测验的测验日期,以及在第二次测验中选择答案 A 的学生人数问题 ID 应该是主要排序键。列出的第一个测验日期应该是次要排序键。

第一个测验的列名称应为 FirstQuiz。在第一次测验中选择答案 A 的学生人数的列名称应为 FirstA。第二个测验的列名称应为 SecondQuiz。在第二次测验中选择答案 A 的学生人数的列名称应为 SecondA。不要使用内部联接连接表的格式。

SELECT QuestionId, min(QuizDate), NumChoseA
FROM quizquestions
GROUP BY QuizNum;

如您所见,我距离解决问题所需的能力还差得很远

I have put in a link to a pastebin containing the database, so that you can see what I am working with.

最佳答案

至少我可以把你踢向正确的方向。

select questionid, min(quizdate) as 'firstquiz'
from QuizQuestions
group by questionid
having count(1) > 1

上面的查询将获取所有问题 ID 及其第一次测验日期(通过最小值)。 having 子句是一个基于聚合的过滤器,在这种情况下,我们将获取所有具有超过 2 条记录的记录(我认为这是您的第一个要求。

第二个要求...为了获得 NumChoseA,我们需要将上述查询连接到测验问题(这就是我之前提到的自连接)。

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,我们将按 numchooseA 进行分组,并为 numchooseA 的每个唯一值返回一个 QuestionID/quizdate,这是我们不想要的。 ——希望这个简介是有道理的……

第二位是捕获“第二”次出现。这有点困难,因为我们需要构建一个子查询来查找 QuestionID,min(quizdate),其中不包括该问题的第一个日期。我更喜欢 CTE。

希望这是一个开始...我今天要离开...评论问题,如果您在这里,我们明天将逐步完成下一部分。

关于mysql - 无法理解这个 mysql 查询的逻辑意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24814614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com