Как подсчитать количество пользователей, посетивших мой магазин более одного раза - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь суммировать общее количество клиентов, которые посещали более одного раза в год. Если я использую какой-либо фильтр, например count (cst_mobile)> 2 SQL, попросив меня использовать has. Я могу найти, как показано ниже, количество посещений (ну, вроде как, я вручную суммирую количество клиентов, которые посетили более одного раза), но не могу найти способ суммирования количества пользователей только, кто посетил более одного раза. Ниже вы можете увидеть результат, который я нахожу сейчас.

Date    Number of Visits    Customer Amount
2020           1                1532
2020           2                2258
2020           3                804
2020           4                166
2020           5                56

Какую часть этого запроса я должен отредактировать, чтобы увидеть единственную сумму?

    select LEFT(CONVERT(datetime2, date_visit, 120), 4) as 'Date',num_visits as 'Number of Visits',count(cst_mobile) as 'Customer Amount'
from (
      select LEFT(CONVERT(datetime2, datevisit, 120), 4) as date_visit,v.cst_mobile
      , count(*) as num_visits
      from users v
      where class_user='Premium' and cst_id != 0 and cst_mobile not like '%000000%'
      and cst_mobile!=''
      group by  LEFT(CONVERT(datetime2, datevisit, 120), 4),cst_mobile
     ) v
group by LEFT(CONVERT(datetime2, date_visit, 120), 4),num_visits
order by LEFT(CONVERT(datetime2, date_visit, 120), 4)desc, num_visits asc```



1 Ответ

3 голосов
/ 09 февраля 2020

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

  select year(datevisit) as datevisit_year, v.cst_mobile,
         count(*) as num_visits
  from users v
  where class_user = 'Premium' and
        cst_id <> 0 and
        cst_mobile not like '%000000%' and
        cst_mobile <> ''
  group by year(datevisit), cst_mobile
  having count(*) >= 2;

А внешний запрос вроде:

select datevisit_year, num_visits, count(*)
from (select year(datevisit) as datevisit_year, v.cst_mobile,
             count(*) as num_visits
      from users v
      where class_user = 'Premium' and
            cst_id <> 0 and
            cst_mobile not like '%000000%' and
            cst_mobile <> ''
      group by year(datevisit), cst_mobile
      having count(*) >= 2
     ) yc
group by datevisit_year, num_visits
order by datevisit_year, num_visits;
...