Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 聚合最大计数子查询,带联接_Mysql_Sql_Join - Fatal编程技术网

Mysql 聚合最大计数子查询,带联接

Mysql 聚合最大计数子查询,带联接,mysql,sql,join,Mysql,Sql,Join,我有以下问题需要解决: “列出1990年及以后出生的成员,并组织了从项目中获得资金的黑客大会,该项目有最多的实验室共同参与。” SELECT MAX为我提供了行中最高的projectID(数字),而不是最高的projectID计数 如何获得表:LabInProject中Projectd的“最大计数” 我试着用一个派生表totalCount创建一个子查询,但我不知道如何将其与连接连接起来,它不起作用 HAVING COUNT(*) = ( SELECT COUNT(projectID) t

我有以下问题需要解决:

“列出1990年及以后出生的成员,并组织了从项目中获得资金的黑客大会,该项目有最多的实验室共同参与。”

SELECT MAX为我提供了行中最高的projectID(数字),而不是最高的projectID计数

如何获得表:LabInProject中Projectd的“最大计数”

我试着用一个派生表totalCount创建一个子查询,但我不知道如何将其与连接连接起来,它不起作用

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
子句not
HAVING
(通常用于聚合)中。最初我还阅读了查询: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
...