2012-03-02 4 views
0

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

Проблема с включением колонки с общим количеством проводов. Returned - это столбец в моей базе данных, где значение равно либо 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

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

SUM(1-l.returned) 

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

+0

Креатив, мне нравится больше, чем у меня. Более эффективен. – JKomusin

+1

Если нет битового поля, возьмите абс() вычитания, чтобы получить значения 0 и 1 – Sparky

1

Попробуйте

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

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

1

Я думаю, вы могли бы сделать это в качестве альтернативы, если это двоичный 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; 
Смежные вопросы