+----------+----------+
| user_id | video_id |
+----------+----------+
| 1 | 1 |
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 2 |
+----------+----------+
我有一个类似于上面的表设置。我想从我的查询中返回一个总数。
对于每个 user_id
,他们需要有一个 DISTINCT video_id
。因此,在上面,user_id = 1
将有 2 个唯一的 video_id,而 user_id = 2
将有 2 个唯一的 video_id。这将使总数为 4。我不确定组织查询以达到预期结果的最佳方式。
基本上对于每个 user_id,我需要类似 COUNT(DISTINCT video_id)
我希望最终结果只是返回所有内容的总数。
最佳答案
如果您想获取每个用户的总数,那么您将使用:
select user_id, count(distinct video_id)
from data
group by user_id;
然后,如果您想获取总 video_ids,则将其包装在子查询中:
select sum(cnt) TotalVideos
from
(
select user_id, count(distinct video_id) cnt
from data
group by user_id
) d
见 SQL Fiddle with Demo两者都有。
第一个查询将为您提供每个 user_id
的 2
的结果,然后得到所有不同 video_id 的总和,您将计数相加。
关于MySQL选择不同的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710930/