2009-04-12 5 views
3

Я пытаюсь найти запрос на получение дохода. Для этого потребуется две таблицы: клики и предложения. Выручка рассчитывается по количеству конверсий * комиссии за предложение. Конверсии хранятся в таблице кликов в поле под названием «conversionDate», и комиссия за каждое предложение хранится в таблице предложений.sql query with if statment

В запросе должно быть условие, чтобы игнорировать любые клики, которые не конвертировались (что означает, что convertDate равно NULL) при добавлении дохода для предложения.

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

ВЫБЕРИТЕ предложение o.name, граф (c.id) щелчки, если (не IsNull (с. conversionDate), доход = доход + o.commission, доход) доход FROM кликов c, предлагает o где c.offerID = o.ID GROUP BY o.ID;

У меня есть 3 фиктивных записи в щелчках прямо сейчас, 2 из которых являются преобразованиями. Если комиссия установлена ​​в 1, доход должен быть равен 2. Результат, который я получаю, равен 1. Я нахожусь на правильном пути или должен ли вычислять доход каким-то подзапросом или что?

ответ

6

Я бы написать запрос так:

SELECT o.name AS offer, COUNT(c.id) AS clicks, 
    SUM(IF(c.conversionDate IS NOT NULL, o.commission, NULL)) AS revenue 
FROM offers o JOIN clicks c ON (c.offerID=o.ID) 
GROUP BY o.ID; 

Вот еще одно решение, но предлагает, что не имеет любой конвертированные клики не показаны в th e query result:

SELECT o.name AS offer, COUNT(c.id) AS clicks, 
    SUM(o.commission) AS revenue 
FROM offers o JOIN clicks c 
    ON (c.offerID=o.ID AND c.conversionDate IS NOT NULL) 
GROUP BY o.ID; 
+0

Первый запрос - это то, что мне нужно. Большое спасибо! –

0

движение нулевой чек на ИНЕКЕ

+0

Это будет работать для этого конкретного примера, но у меня на самом деле используется гораздо больше информации; Я не могу исключить клики, которые не конвертировались, так как это могло бы испортить другие данные. –

+0

@ [wbgriffin]: разделите его на 2 суб/запросы или опубликуйте реальную вещь; не может точно ответить на вопросы, используя неполные/вводящие в заблуждение примеры ;-) –

0

Попробуйте этот запрос:

SELECT o.name offer, COUNT(c.id) clicks, IF(c.conversionDate IS NULL, revenue + o.commission, revenue) revenue 
FROM clicks c, offers o 
WHERE c.offerID=o.ID 
GROUP BY o.ID; 
+0

тот же результат, что и мой исходный запрос. –

0
SELECT o.name offer, count(*) clicks, (COUNT(c.ID) * o.commission) revenue 
FROM clicks c, offers o 
WHERE c.ConversionDate is not null and c.offerID=o.ID 
GROUP BY o.ID, o.name, o.commission;