You need to enable JavaScript to run this app. MySQL简单查询实现按V_ID统计独立用户观看次数的方法
优惠活动
大模型
产品
解决方案
定价
更多

MySQL简单查询实现按V_ID统计独立用户观看次数的方法

按V_ID去重统计独立观看数的MySQL实现

核心逻辑

这个需求的本质是统计每个视频的独立观看用户数,而非累计播放次数:同一个USER_P_ID的用户,无论对同一个V_ID产生多少条观看记录,都只计1次。
如果直接对原表按V_ID分组、计数行数或是累加原表的VIEW COUNT字段,会把同一用户的重复观看算入,结果会和预期产生偏差,必须在统计中加入「用户+视频」维度的去重。

两种可直接落地的实现

简洁版:直接用COUNT(DISTINCT)去重计数

这是常规场景下最省代码的写法,不需要嵌套子查询,日常统计时直接可用:

SELECT
  V_ID,
  COUNT(DISTINCT USER_P_ID) AS view_count
FROM View_count
GROUP BY V_ID;

运行效果完全匹配预期:

  • V1维度下去重后的用户为10、11,计数为2
  • V2维度下去重后的用户为12,计数为1
  • V3维度下去重后的用户为11、13,计数为2

大数据量优化版:先子查询去重再分组

当View_count表的规模达到百万级以上时,可以先把重复的用户-视频组合筛成最小数据集,再做分组统计,部分场景下性能优于直接COUNT(DISTINCT):

SELECT
  V_ID,
  COUNT(*) AS view_count
FROM (
  -- 筛出所有不重复的 用户-视频 观看组合,每个组合仅保留1条
  SELECT DISTINCT USER_P_ID, V_ID
  FROM View_count
) AS user_video_distinct
GROUP BY V_ID;

常见逻辑坑点

注意:这个统计逻辑和原表自带的VIEW COUNT字段没有关系。直接累加该字段得到的是累计播放次数(PV),没有做用户维度去重——比如样例中直接对V1的VIEW COUNT求和,会得到3(ID1、ID2、ID3三条记录的1相加),和预期的独立用户数2不符,是这个场景下最容易踩的逻辑偏差。


内容的提问来源于stack exchange,提问作者Bala Murugan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 20:27:04