MySQL count () запрос возвращает строки вместо общего? - PullRequest
3 голосов
/ 23 февраля 2011

Что может быть не так с этим запросом:

select count(customer_email) as num_prev
  from _pj_cust_email_by_date
  where order_date < '2011-02'
  and customer_email is not null
  group by customer_email having count(order_date) > 0;

, который возвращает результаты строки, такие как:

1
2
3
2
1
5
4

Когда я пытаюсь получить полный счет от общего количества клиентов, купленных за указанный диапазон дат?

_pj_cust_email_by_date - это представление, которое возвращает только адрес электронной почты и дату заказа в формате ГГГГ-ММ-ДД. У меня нет доступа, чтобы использовать что-либо, кроме этого представления.

Ответы [ 2 ]

3 голосов
/ 23 февраля 2011

Причиной этого является GROUP BY.

Это приводит к тому, что для каждой группы возвращается одна строка результата, причем для каждого отдельного значения customer_email.

Если требуется общееколичество разных адресов электронной почты, тогда вам нужно удалить предложение GROUP BY и изменить COUNT на COUNT(DISTINCT customer_email).

2 голосов
/ 23 февраля 2011

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

select count(*) CustomerCount
from (
    select count(customer_email) as num_prev
    from _pj_cust_email_by_date
    where order_date < '2011-02'
    and customer_email is not null
    group by customer_email having count(order_date) > 0;
) as innercount

Обычно это подход, но так как вы используете having count(order_date) > 0, я думаю, вам нужно только

select count(distinct customer_email) as num_prev
from _pj_cust_email_by_date
where order_date < '2011-02' and customer_email is not null

Поскольку предложение HAVING никогда не будет детализировано с пустыми датами order_dates, что делает предложение HAVING пустым , на самом деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...