SQL Количество допустимых транзакций на пользователя - PullRequest
0 голосов
/ 11 декабря 2018

Мне нужно получить список клиентов, которые сделали определенное количество действительных транзакций между двумя датами.

SELECT
  customer.customer_id,
  COUNT(
    CASE WHEN transaction.transaction_date>="2010-01-01" 
      THEN 1 
    ELSE NULL 
    END
  ) AS Total
FROM customer
LEFT JOIN transaction ON customer.customer_id = transaction.customer_id
GROUP BY customer.customer_id
HAVING (Total>=min_transactions AND Total<=max_transactions)

Это ничего не возвращает.Удаляя CASE в COUNT (..), он возвращает количество транзакций на пользователя, но также содержит недопустимые транзакции и транзакции вне диапазона.

Разве цикл CASE не должен работать так, как вCOUNT?

Лучше ли считать только транзакции без объединения двух таблиц?

(Использование MySQL)

1 Ответ

0 голосов
/ 11 декабря 2018

Я думаю, что это запрос, который вы хотите:

SELECT c.customer_id, COUNT(t.customer_id) as Total
FROM customer c LEFT JOIN
     transaction t
     ON c.customer_id = t.customer_id AND
        t.transaction_date >= '2010-01-01'
GROUP BY c.customer_id
HAVING Total >= min_transactions AND Total <= max_transactions;

Примечания:

  • Условия для таблицы second в LEFT JOIN обычнопринадлежат в предложении ON.
  • Используйте одинарные кавычки для даты и строковых констант.Двойные кавычки могут использоваться для экранирования идентификаторов.
  • count() отсчитывает от второй таблицы.Если совпадений нет, счет будет 0.
  • A LEFT JOIN необходим, только если min_transactions когда-либо 0.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...