Получение количества строк с помощью запроса GROUP BY в подзапросе - PullRequest
0 голосов
/ 22 сентября 2011

Я строю запрос MySQL с подзапросами. Запрос требует, как описано в Получение числа строк с запросом GROUP BY , количество записей, возвращаемых запросом group-by, потому что я хочу количество дней с записями в базе данных. Поэтому я использую следующее:

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?

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Попробуйте следующее:

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
0 голосов
/ 22 сентября 2011

Вы пытались также поместить таблицу "посредников" в ОТ самого глубокого подзапроса? Потому что это два разных запроса, а таблицы первого не вызываются в подзапросе. Я не уверен в том, что я говорю, но я думаю, что единственное отношение между запросом и подзапросом - это результат, возвращаемый подзапросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...