【问题标题】:Getting the number of rows with a GROUP BY query within a subquery在子查询中使用 GROUP BY 查询获取行数
【发布时间】:2011-09-22 09:26:31
【问题描述】:

我正在构建一个带有子查询的 MySQL 查询。如Getting the number of rows with a GROUP BY query 中所述,该查询需要分组查询返回的记录数,因为我想要数据库中记录的天数。所以我正在使用以下内容:

SELECT
  COUNT(*)
FROM
(
  SELECT
    cvdbs2.dateDone
  FROM
    cvdbStatistics cvdbs2
  WHERE
    cvdbs2.mediatorId = 123
  GROUP BY
    DATE_FORMAT( cvdbs2.dateDone, "%Y-%d-%m" )
) AS activityTempTable

现在,我希望将其作为子查询,因为我需要更多具有不同 WHERE 语句的数据。所以我的查询变成了:

SELECT
  x,
  y, 
  z,
  (
    SELECT
      COUNT(*)
    FROM
    (
      SELECT
        cvdbs2.dateDone
      FROM
        cvdbStatistics cvdbs2
      WHERE
        cvdbs2.mediatorId = mediators.id
      GROUP BY
        DATE_FORMAT( cvdbs2.dateDone, "%Y-%d-%m" )
    ) AS activityTempTable
  ) AS activeDays
FROM
  mediators
LEFT JOIN
  cvdbStatistics
ON
  mediators.id = cvdbStatistics.mediatorId
WHERE
  mediators.recruiterId = 409
GROUP BY
  mediators.email

(我在查询中遗漏了一些不相关的 WHERE 语句。409 只是一个示例 id,这是由 PHP 插入的)。

现在,我收到以下错误:

#1054 - Unknown column 'mediators.id' in 'where clause' 

MySQL 忘记了最深子查询中的 mediators.id。如何使用 GROUP-BY 查询的结果数构建查询,该查询需要主查询中的值作为结果之一?为什么最深的查询不知道“mediators.id”?

【问题讨论】:

    标签: mysql sql group-by subquery


    【解决方案1】:

    尝试以下方法:

    SELECT
      x,
      y, 
      z,
      (
        SELECT
          COUNT(distinct DATE_FORMAT( cvdbs2.dateDone, "%Y-%d-%m" ))
        FROM
          cvdbStatistics cvdbs2
        WHERE
          cvdbs2.mediatorId = mediators.id
      ) AS activeDays
    FROM
      mediators
    LEFT JOIN
      cvdbStatistics
    ON
      mediators.id = cvdbStatistics.mediatorId
    WHERE
      mediators.recruiterId = 409
    GROUP BY
      mediators.email
    

    【讨论】:

    • 我应该知道这个...谢谢,马克!
    【解决方案2】:

    您是否尝试将“中介”表也放入最深子查询的 FROM 中?因为它们是两个不同的查询,并且第一个的表在子查询中没有被调用。我不确定我在说什么,但我认为查询和子查询之间的唯一关系是子查询返回的结果。

    【讨论】:

    • 感谢您的回答。它们肯定是相关的,因为子查询的结果对于 mediators 表中的每条记录都会有所不同(这就是我需要 mediators.id 的原因)。
    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多