Добавление подзапроса - PullRequest
0 голосов
/ 03 марта 2012

У меня следующий запрос, и я пытаюсь создать четыре столбца: покупатель, источник, общее количество потенциальных клиентов и возвращенные потенциальные клиенты.

Проблема заключается в том, чтобы включить столбец с общим количествомприводит.Возвращен столбец в моей базе данных, где значение равно 0 или 1. Таким образом, возвращается все, что равно 1, но для купленных лидов мне нужно все, что равно 0. Когда я запускаю следующий запрос, все купленные лиды заканчиваются тем, что0. Как я могу исправить подзапрос, чтобы получить желаемые результаты.

SELECT 
    ba.buyer, 
    l.source,
    (SELECT COUNT(*) FROM lead_status WHERE lead_id = l.id AND returned != 1) AS 'Bought Leads',
    SUM(l.returned) AS 'Returned_Leads' 
FROM lead_status AS ls 
    LEFT JOIN leads AS l ON ls.lead_id = l.id
    LEFT JOIN buyer_account AS ba ON ba.lead_buyer_id = ls.lead_buyer_id
WHERE l.origin = 'PING_POST' 
    AND ls.discriminator IN('AUTO_POST','HOME_POST','HEALTH_POST','LIFE_POST')
    AND DATE(ls.create_date) BETWEEN '2012-02-01' AND '2012-02-31'
    AND l.sold = 1 AND ls.winner = 1 AND l.test = 0 AND l.returned = 1
GROUP BY ls.buyer, l.source;

Ответы [ 3 ]

3 голосов
/ 03 марта 2012

Просто замените подзапрос на:

SUM(1-l.returned)

Пока это битовое поле, в противном случае вы должны заставить обе суммы работать с CASE-статутом, то есть с суммой (регистр возвращается, когда 0, затем 1 или 0 заканчиваются).

1 голос
/ 03 марта 2012

Я думаю, вы могли бы сделать это в качестве альтернативы, если это двоичная 1 или 0:

SELECT 
    ba.buyer, 
    l.source,
    COUNT(l.returned) - SUM(l.returned) AS 'Bought Leads',
    SUM(l.returned) AS 'Returned_Leads' 
FROM lead_status AS ls 
    LEFT JOIN leads AS l ON ls.lead_id = l.id
    LEFT JOIN buyer_account AS ba ON ba.lead_buyer_id = ls.lead_buyer_id
WHERE l.origin = 'PING_POST' 
    AND ls.discriminator IN('AUTO_POST','HOME_POST','HEALTH_POST','LIFE_POST')
    AND DATE(ls.create_date) BETWEEN '2012-02-01' AND '2012-02-31'
    AND l.sold = 1 AND ls.winner = 1 AND l.test = 0 AND l.returned = 1
GROUP BY ls.buyer, l.source;
1 голос
/ 03 марта 2012

Попробуйте

SUM( abs(l.returned-1) )
  • если возвращено 0, возвращается -1
  • если возвращено 1, возвращается 0

принимая значение abs (), вы получаете +1, поэтому ваш SUM () должен работать

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