Как посчитать, сколько клиентов имело указанное c событие в SQL - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь подсчитать, сколько клиентов совершило 1 или более транзакций со скачками в 2019 году. В приведенном ниже запросе возвращается общее количество транзакций со скидкой, а не количество клиентов со транзакцией со скидкой. Что мне нужно изменить, чтобы счетчик отображал количество клиентов, а не количество транзакций?

select count(c.id)
from customers c
left join transactions t on t.customer_id = c.id 
where t.is_swipe = 'Y'
and t.created_date between '2019-01-01' and '2019-12-31' 
and t.is_swipe > 0

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Использовать DISTINCT:

select count(distinct c.id)
from customers c inner join 
     transactions t on t.customer_id = c.id 
where t.is_swipe = 'Y' and 
      t.created_date between '2019-01-01' and '2019-12-31' and 
      t.is_swipe > 0;

Вы можете использовать INNER JOIN, чтобы проверять только совершенную транзакцию клиента вместо LEFT JOIN.

Однако вы также можете использовать exists :

select count(c.id)
from customers c 
where exists (select 1 
              from transactions t 
              where t.created_date between '2019-01-01' and '2019-12-31' and 
                    t.is_swipe > 0 and
                    t.customer_id = c.id
             );
0 голосов
/ 01 мая 2020

Используйте COUNT(DISTINCT <column>). Например:

select count(distinct c.id)
from customers c
left join transactions t on t.customer_id = c.id 
where t.is_swipe = 'Y'
and t.created_date between '2019-01-01' and '2019-12-31' 
and t.is_swipe > 0

Однако мне неясно, является ли столбец t.is_swipe цифрой c от varchar. Вы сравниваете его дважды с разными значениями.

...