Вопрос MySQL об использовании между операторами

#mysql #between

#mysql #между

Вопрос:

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

Однако при расчете количества уникальных клиентов, сохраненных на второй день, первоначальный автор использовал другой подход и получил другой результат.

Код приведен ниже:

 select count(distinct user_id) as first_day_customer_num from userbehavior
where date = '2017-11-25';-- 359 unique customers counted and retained on the first day

select count(distinct user_id) as second_day_customer_num from userbehavior
where date = '2017-11-26' and user_id in (SELECT user_id FROM userbehavior
WHERE date = '2017-11-25');-- 295 unique customers counted and retained on the second day
 

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

 select count(distinct user_id) as trial from userbehavior 
where date between '2017-11-25' and '2017-11-26'; -- 450 unique customers counted
 

Могу ли я спросить, почему наш результат отличается и какую часть я сделал неправильно?

Большое вам спасибо за вашу помощь и поддержку, действительно ценю это.

Комментарии:

1. Ваш запрос select учитывается user_id как для 25-го, так и для 26-го, поэтому он будет выводить больше данных . В то время как автор сначала отфильтровал user_id те, которые присутствовали 25-го, а затем проверил, были ли сохранены эти идентификаторы 26-го.

2. Это не то, что делает between — 3-й запрос будет учитывать клиентов, которые совершили транзакцию в ‘2017-11-25’ ИЛИ ‘2017-11-26’; и эквивалентно date> = ‘2017-11-25’ и date < = ‘2017-11-26’;

3. Попробуйте это select count(distinct user_id) as trial from userbehavior where date >= '2017-11-25' and date < '2017-11-26'