Подсчет, показывающий различные результаты в Postgresql. Интересно, Почему

#postgresql

Вопрос:

у меня есть такой запрос:

 select count(distinct(buyer)) from tablename
where date(purchase_date) >= (cast(current_date as date) - interval '220' day)
 

На выходе получается: 11449

тогда у меня есть этот запрос:

 with cte as (SELECT
    distinct(buyer),

    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '1' day))as day1 ,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '2' day))as day2 ,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '5' day))as day5 ,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '7' day))as day7 ,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '15' day))as day15,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '30' day))as day30,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '60' day))as day60,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '90' day))as day90,
    COUNT(order) FILTER (WHERE date(purchase_date) >= (cast(current_date as date) - interval '220' day))as day220

FROM tablename
group by buyer
order by day220 desc)

select count(distinct(buyer)) from cte
 

и результат таков 20507

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

Что я здесь упускаю? Я ошибаюсь, ожидая, что подсчеты будут одинаковыми?

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

1. Несвязанный, но: distinct не является функцией. Заключение имени столбца после distinct ключевого слова в круглые скобки ничего не дает.

Ответ №1:

Во втором нет основного предложения WHERE, поэтому оно включает отдельных покупателей из всех строк таблицы. Вы, кажется, думаете, что PostgreSQL собирается объединить все предложения ФИЛЬТРА (ГДЕ…) и применить их в качестве основного предложения WHERE, но он этого не делает (и было бы неразумно для него это делать).

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

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

1. его order_id, подумал, что это не повлияет на понимание моего вопроса