2016-09-07 97 views
0
类别

获得总计独立用户数以及分组我有以下SQL表:如何通过

user_id | device | num_uses 
--------------------------- 
1  | phone | 10 
1  | tv  | 5 
2  | phone | 15 
3  | tv  | 45 

我要拿出一个查询将返回每个设备用户的数量,而且还唯一用户总数。

是否有可能有一个查询要做到这一点,或者是我创建2个查询,一个用于每个设备的用户数唯一的选择,然后又得到用户的不同数量?

查询我得由设备用户的数量是:

select count(user_id), device from usage group by device; 

这给了我:

count | device 
--------------- 
2  | phone 
2  | tv 

预期的结果将是:

category_count | device | total_distinct_users 
------------------------------------------------ 
2    | phone | 3 
2    | tv  | 3 
+0

请编辑您的问题以显示您想要的结果。 –

+0

您的预期结果是什么? – sgeddes

回答

1

你想要count(distinct)。我觉得是这样的:

select device, sum(uses) as num_uses, count(*) as num_users, 
     count(distinct user_id) as num_distinct_users 
from usage 
group by device; 

编辑:

如果你想每个设备和独特的用户总数的用户数量,那么你可能会想:

select u.device, count(*) as num_users, 
     uu.num_distinct_users 
from usage u cross join 
    (select count(distinct user_id) as num_distinct_users from usage) uu 
group by device, uu.num_distinct_users; 
+0

第二个查询是我想要的! – jcm

+0

这是不正确的,这被视为硬编码值,如果我再添加一个值5,'iphone',5再次它返回4为每个设备是否正确? – Susang

0

我的猜测是你想要还包括countdistinct

select count(user_id), 
     count(distinct user_id), 
     device 
from usage 
group by device 
0

我们也可以通过以下方式完成:

SELECT u.device, 
    COUNT(u.user_id) category_count, 
    MAX(t.tot) total_distinct_users 
FROM #usage u 
OUTER APPLY(SELECT COUNT(DISTINCT USER_ID) tot FROM #usage) t 
GROUP BY device