MySQL选择不同的计数

Jak*_*ako 25 mysql

+----------+----------+
| user_id  | video_id |
+----------+----------+
|        1 |    1     |
|        1 |    1     |
|        1 |    2     |
|        2 |    1     |
|        2 |    2     |
+----------+----------+
Run Code Online (Sandbox Code Playgroud)

我有一个类似于上面的表设置.我想从查询中返回总计数.

每个user_id他们需要有一个DISTINCT video_id.所以上面,user_id = 1将有2个独特的video_id,user_id = 2并将有2个独特的video_id.这将使总数为4.我不确定组织查询以获得所需结果的最佳方法.

基本上对于每个user_id,我需要类似的东西, COUNT(DISTINCT video_id)

我希望最终的结果只是为了返回所有内容的总数.

Tar*_*ryn 58

如果您想获得每个用户的总计数,那么您将使用:

select user_id, count(distinct video_id)
from data
group by user_id;
Run Code Online (Sandbox Code Playgroud)

然后,如果你想获得总video_ids,那么你将把它包装在子查询中:

select sum(cnt) TotalVideos
from
(
  select user_id, count(distinct video_id) cnt
  from data
  group by user_id
) d
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo of both.

第一个查询将为您2提供每个查询的结果,user_id然后获取您计算总数的所有不同video_ids的总和.