MySQL选择不同的计数

时间:2013-03-29 20:28:12

标签: mysql

+----------+----------+
| 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&#39。这将使总数达到4.我不确定组织查询以获得所需结果的最佳方式。

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

的内容

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

4 个答案:

答案 0 :(得分:57)

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

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

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

答案 1 :(得分:2)

select user_id, count(distinct video_id) from TABLE group by user_id;

答案 2 :(得分:2)

总计数......

select distinct count(video_id) from Table
where...
group...

答案 3 :(得分:0)

目前,唯一的user_id总数可以通过以下查询来计算video_id对

select count(distinct user_id, video_id) from table;