SQL-запрос с if statment - PullRequest
       17

SQL-запрос с if statment

3 голосов
/ 13 апреля 2009

Я пытаюсь найти запрос, чтобы сообщить о доходах. Для этого потребуются 2 таблицы: клики и предложения. Доход рассчитывается по количеству конверсий * комиссия за предложение. Конверсии хранятся в таблице кликов в поле "ConversionDate", а комиссия за каждое предложение сохраняется в таблице предложений.

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

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

ВЫБРАТЬ предложение o.name, количество (c.id) кликов, если (не isnull (c.conversionDate), доход = доход + o.commission, доход) доход ОТ кликов c, предложения o, где c.offerID = o .ID GROUP BY o.ID;

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

Ответы [ 4 ]

6 голосов
/ 13 апреля 2009

Я бы написал запрос следующим образом:

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;

Вот еще одно решение, но предложения, которые не имеют любых конвертированных кликов, не отображаются в результате запроса:

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 голосов
/ 13 апреля 2009

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

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 голосов
/ 13 апреля 2009
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;
0 голосов
/ 13 апреля 2009

переместить нулевую проверку в предложение WHERE

...