Mysql 聚合最大计数子查询,带联接
我有以下问题需要解决: “列出1990年及以后出生的成员,并组织了从项目中获得资金的黑客大会,该项目有最多的实验室共同参与。” SELECT MAX为我提供了行中最高的projectID(数字),而不是最高的projectID计数 如何获得表:LabInProject中Projectd的“最大计数” 我试着用一个派生表totalCount创建一个子查询,但我不知道如何将其与连接连接起来,它不起作用Mysql 聚合最大计数子查询,带联接,mysql,sql,join,Mysql,Sql,Join,我有以下问题需要解决: “列出1990年及以后出生的成员,并组织了从项目中获得资金的黑客大会,该项目有最多的实验室共同参与。” SELECT MAX为我提供了行中最高的projectID(数字),而不是最高的projectID计数 如何获得表:LabInProject中Projectd的“最大计数” 我试着用一个派生表totalCount创建一个子查询,但我不知道如何将其与连接连接起来,它不起作用 HAVING COUNT(*) = ( SELECT COUNT(projectID) t
HAVING COUNT(*) =
(
SELECT COUNT(projectID) totalCount
FROM LabInProject
GROUP BY projectID
LIMIT 1
)
这里有一个语法错误。
试着在语句的末尾加上结束括号。考虑一下内部联接中的以下派生表及其自己的派生表,以替换前面的
WHERE
条件。这将返回共享相同最大计数的多个项目:
...
INNER JOIN
-- OBTAIN PROJECT AND COUNTS CONDITIONED TO THE MAX
(SELECT sub.ProjectID, Count(*) As ProjectIDCount
FROM LabInProject sub
INNER JOIN Project ON LabInProject.projectID=Project.projectID
INNER JOIN Hackathon ON Project.projectID=Hackathon.fundingProject
INNER JOIN Hubs ON Hackathon.eventID=Hubs.eventID
INNER JOIN Member ON Member.email=Hubs.organiserMember
WHERE Member.dateOfBirth > '1990'
GROUP BY sub.ProjectID
HAVING Count(*) IN
-- OBTAIN SCALAR VALUE OF MAX PROJECT COUNT
(SELECT Max(dT.ProjectIDCount) As MaxOfProjectIDCount
FROM
-- OBTAIN PROJECT COUNTS
(SELECT subdT.ProjectID, Count(*) As ProjectIDCount
FROM LabInProject subdT
INNER JOIN Project ON LabInProject.projectID=Project.projectID
INNER JOIN Hackathon ON Project.projectID=Hackathon.fundingProject
INNER JOIN Hubs ON Hackathon.eventID=Hubs.eventID
INNER JOIN Member ON Member.email=Hubs.organiserMember
WHERE Member.dateOfBirth > '1990'
GROUP BY subdT.ProjectID) As dT)
) As temp
ON LabInProject.projectID = temp.projectID
...
请发布所有表的架构,顺便说一下,不允许(逻辑上错误)显示GROUPBY子句中不存在的具有聚合函数的列。如果你发布一个SQL提琴,那将非常好。谢谢你的回答。谢谢你的回答。它起作用了。我正在尝试修改查询,以便在COUNT和MAX的子查询聚合之前执行条件:HAVING Member.dateOfBirth>='1990'。根据查询:Member.dateOfBirth>='1990'必须在projectID的COUNT MAX之前选择(HAVING/WHERE)。似乎不可能在Member.email=Hubs.OrganizerMember上实现WHERE/HAVING Member.dateOfBirth>'1990'内部加入成员。所以我想我必须连接另一个子查询?您必须将条件移动到查询中,从而移动所有相应的连接表。我开始了这样的编辑,但在你的帖子中,问题提到了拉…的项目,有最多的实验室合作他们(并从这样的项目列表中筛选某些成员年龄)。另外,该条件应该在
WHERE
子句notHAVING
(通常用于聚合)中。最初我还阅读了查询:COUNT MAX projectsOnLab first,然后列出成员出生日期。但情况应该是相反的。这样就可以找到其他成员dateOfBirth的COUNT MAX projectsOnLab。我知道在查找成员dateOfBirth时应该在何处使用而不是在何处使用:WHERE member.dateOfBirth>='1990'我不太明白应该在哪个查询中插入条件?因为有3个嵌套的SELECT语句。请参阅使用多个内部联接更新以获取成员字段。
WHERE LabInProject.projectID = (SELECT MAX(LabInProject.projectID) FROM LabInProject)
...
INNER JOIN
-- OBTAIN PROJECT AND COUNTS CONDITIONED TO THE MAX
(SELECT sub.ProjectID, Count(*) As ProjectIDCount
FROM LabInProject sub
INNER JOIN Project ON LabInProject.projectID=Project.projectID
INNER JOIN Hackathon ON Project.projectID=Hackathon.fundingProject
INNER JOIN Hubs ON Hackathon.eventID=Hubs.eventID
INNER JOIN Member ON Member.email=Hubs.organiserMember
WHERE Member.dateOfBirth > '1990'
GROUP BY sub.ProjectID
HAVING Count(*) IN
-- OBTAIN SCALAR VALUE OF MAX PROJECT COUNT
(SELECT Max(dT.ProjectIDCount) As MaxOfProjectIDCount
FROM
-- OBTAIN PROJECT COUNTS
(SELECT subdT.ProjectID, Count(*) As ProjectIDCount
FROM LabInProject subdT
INNER JOIN Project ON LabInProject.projectID=Project.projectID
INNER JOIN Hackathon ON Project.projectID=Hackathon.fundingProject
INNER JOIN Hubs ON Hackathon.eventID=Hubs.eventID
INNER JOIN Member ON Member.email=Hubs.organiserMember
WHERE Member.dateOfBirth > '1990'
GROUP BY subdT.ProjectID) As dT)
) As temp
ON LabInProject.projectID = temp.projectID
...