MySQL选择不同的计数

Posted

技术标签:

【中文标题】MySQL选择不同的计数【英文标题】:MySQL Select Distinct Count 【发布时间】:2013-03-20 14:35:51 【问题描述】:
+----------+----------+
| 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)

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

【问题讨论】:

对计算多列不同行感兴趣的人(例如,使用通配符 *)应该检查 this answer。 【参考方案1】:

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

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_id2 的结果,然后得到所有不同 video_id 的总数,您将计数相加。

【讨论】:

@bluefeet 顺便说一句,如果我们有另一列是 audio_id 并且我们也想在同一个查询中获得它的计数? 参考你的这个答案***.com/questions/12789396/… 但我需要像上面一样选择它。 @IrfanAhmed 我不确定。我会说根据您的要求发布一个新问题,以便可以回答。【参考方案2】:
select user_id, count(distinct video_id) from TABLE group by user_id;

【讨论】:

有没有办法只返回总计数而不是每个用户计数? 是的,我相信 bluefeet 对你的回答非常好。【参考方案3】:

对于总数...

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

【讨论】:

我知道它已经过时了,但为了正确起见,上述内容不会返回原始问题中所要求的唯一值的总数。【参考方案4】:

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

select count(distinct user_id, video_id) from table;

【讨论】:

以上是关于MySQL选择不同的计数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mysql5 中的查询添加不同查询的计数?

MySql:使用联合或连接按计数选择

选择计数(*)和选择计数(字段名)之间的区别[重复]

优化 Mysql 查询

mysql 选择计数与另一个选择计数

选择多个不同条件的计数,只计数不同,在一行中返回结果