SELECT COUNT () в левой соединительной таблице mysql

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

запрос:

$productSql = "SELECT months.monthnum as monthnum, COUNT(contacts.lead_date) as lead_date_month, COUNT(contacts.close_date) as close_date_month, contacts.rep as rep
FROM months
LEFT JOIN contacts
ON months.monthnum = MONTH(contacts.lead_date)
AND months.monthnum = MONTH(contacts.close_date)
AND contacts.compid='$compid'
AND YEAR(contacts.lead_date) = '$year'
AND YEAR(contacts.close_date) = '$year'
AND contacts.rep = '$rep'
GROUP BY months.monthnum
ORDER BY months.monthnum ASC";

$productResult = mysql_query($productSql, $link) or die(mysql_error());$label[] = $productRow['monthnum'];
$lead[] = $productRow['lead_date_month'];
$close[] = $productRow['close_date_month'];
};

echo "[".json_encode($label).",".json_encode($lead).",".json_encode($close)."]";

результат:

[["January","February","March","April","May","June","July","August","September","October","November","December"],
["0","0","0","0","0","0","0","0","1","1","0","0"],
["0","0","0","0","0","0","0","0","1","1","0","0"]]

** Пожалуйста, не наказывайте меня за использование MySQL. Я сваливаю это, как только этот проект закончен.

0

Решение

То, как вы строите свой JOIN условие, вы получите результаты только из записей с MONTH(contacts.lead_date) знак равно MONTH(contacts.close_date),

Чтобы исправить это и получить фактический счетчик, я бы предложил разделить оператор на два запроса:

SELECT
a.monthnum,
a.lead_date_month, b.close_date_month,
b.close_date_month / a.lead_date_month
FROM
(
-- Count number of new leads
SELECT
months.monthnum as monthnum,
COUNT(*) as lead_date_month,
contacts.rep as rep
FROM
months
LEFT JOIN contacts
ON
months.monthnum = MONTH(contacts.lead_date)
AND contacts.compid='$compid'
AND YEAR(contacts.lead_date) = '$year'
AND contacts.rep = '$rep'
GROUP BY
months.monthnum
ORDER BY
months.monthnum ASC
) as a
JOIN
(
-- Count number of closed leads
SELECT
months.monthnum as monthnum,
COUNT(*) as close_date_month,
contacts.rep as rep
FROM
months
LEFT JOIN contacts
ON
months.monthnum = MONTH(contacts.close_date)
AND contacts.compid='$compid'
AND YEAR(contacts.close_date) = '$year'
AND contacts.rep = '$rep'
GROUP BY
months.monthnum
ORDER BY
months.monthnum ASC
) as b
ON a.monthnum = b.monthnum

И MySQL не так уж и плох. Но MariaDB лучше, вы правы 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]