MySQL选择不同的计数

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

关于MySQL选择不同的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710930/

相关文章:

php - bind_param、无效对象或资源反复出现问题

MySQL (innodb) 防止循环引用

mysql - 防止 MySQL (InnoDB) 上 2 个表出现重复 ID

php - MysqL:对多列执行全文搜索并100%匹配

php - 从 MySQL 数据库读取不起作用

php - 在简单的小项目中使用的最好的 mysql php 类是什么?

mysql - 安装magento时mysql中的时间戳错误

mysql - 如何修改MySQL实例root用户密码?

c# - 命名参数顺序对 MySql .Net 数据提供程序有意义吗?

mysql - MySQL GROUP BY 子句中应放置哪些列