#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'