34
+----------+----------+
| 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)

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

4

4 回答 4

78

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

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_id 的总数,您将计数相加。

于 2013-03-29T20:31:47.630 回答
3
select user_id, count(distinct video_id) from TABLE group by user_id;
于 2013-03-29T20:29:40.057 回答
3

对于总数...

select distinct count(video_id) from Table
where...
group...
于 2014-02-18T00:02:57.290 回答
0

现在,可以使用以下查询计算唯一 user_id、video_id 对的总数

select count(distinct user_id, video_id) from table;
于 2019-07-23T09:09:36.113 回答