2016-10-19 2 views
3

Мне нужно подсчитать, включен ли UserId один или несколько раз, и если поставить +1 на «новых пользователей», иначе «+1» на «возвращающихся пользователей».Подсчитайте количество строк с наличием ... SQL

ли я сделал:

select 
Count(distinct [UserId]) as 'Unique users' 
from [TelemetryData] 
where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick' 

/* returning */ 
select 
count(Id) as 'Returning users' 
from [TelemetryData] 
where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick' 
group by [UserId] 
having count(Id) > 1 

/* returning */ 
select 
count(*) as 'New users' 
from [TelemetryData] 
where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick' 
group by [UserId] 
having count(*) = 1 

Мне нужно подсчитать общее NUMER строк в «возвращении» и «новые» запросы пользователей, как и в первом запросе. Как это сделать?

+0

Это выглядит как код SQL Server, поэтому я добавил этот тег. –

ответ

2

Вы можете сделать это с помощью двух уровней агрегации. Подсчитайте количество на UserId уровне, а затем использовать эту информацию, чтобы получить отсчеты вы хотите:

select sum(case when cnt > 1 then 1 else 0 end) as ReturningUsers, 
     sum(case when cnt = 1 then 1 else 0 end) as NewUsers 
from (select UserId, count(*) as cnt 
     from [TelemetryData] 
     where [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' and [EventName] = 'DiscountClick' 
     group by UserId 
    ) u 
+0

его не работает 'cnt' не найден. выберите сумма (случай, когда 'CNT'> 1, то 1 еще 0 концов) как 'ReturningUsers', сумма (случай, когда 'CNT' = 1, то 1 еще 0 концов), как выбрать 'NewUsers' из ( \t \t \t [UserId], \t \t граф (*), как 'CNT' из [TelemetryData] где [DiscountId] = '8CAEA860-6766-43E2-9280-27AFE7FDF82E' и [EventName] = '' DiscountClick группы по [UserId ] \t) – Nerf

+1

@Nerf использование все запрос. с 'u' в конце – gofr1

+0

О, хорошо. Что такое 'u'? Я думал, что это неправильно, и удалил его; D – Nerf

Смежные вопросы