You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL按用户统计满足访问量条件的时段数(含SQL问题)

解决用户访问时段统计的SQL问题

嘿,我看了你写的SQL,问题出在CASE语句的语法错误和缺少用户分组上,咱们一步步修正它,实现你要的三个统计指标。

先说说你原有SQL的问题

  • 你把多个CASE语句直接连在一起写,这不符合SQL语法规范,每个判断逻辑都需要是独立的CASE WHEN ... THEN 1 ELSE 0 END,再把这些值相加后用SUM汇总
  • 没有添加GROUP BY userid,这样会把所有用户的结果合并成一行,无法得到每个用户单独的统计数据

正确的SQL实现

SELECT
    userid,
    -- 统计至少1次访问的时段数量
    SUM(
        CASE WHEN z0 > 0 THEN 1 ELSE 0 END +
        CASE WHEN z1 > 0 THEN 1 ELSE 0 END +
        CASE WHEN z2 > 0 THEN 1 ELSE 0 END +
        CASE WHEN z3 > 0 THEN 1 ELSE 0 END +
        CASE WHEN z4 > 0 THEN 1 ELSE 0 END +
        CASE WHEN z5 > 0 THEN 1 ELSE 0 END
    ) AS visit1,
    -- 统计至少5次访问的时段数量
    SUM(
        CASE WHEN z0 >= 5 THEN 1 ELSE 0 END +
        CASE WHEN z1 >= 5 THEN 1 ELSE 0 END +
        CASE WHEN z2 >= 5 THEN 1 ELSE 0 END +
        CASE WHEN z3 >= 5 THEN 1 ELSE 0 END +
        CASE WHEN z4 >= 5 THEN 1 ELSE 0 END +
        CASE WHEN z5 >= 5 THEN 1 ELSE 0 END
    ) AS visit5,
    -- 统计至少10次访问的时段数量
    SUM(
        CASE WHEN z0 >= 10 THEN 1 ELSE 0 END +
        CASE WHEN z1 >= 10 THEN 1 ELSE 0 END +
        CASE WHEN z2 >= 10 THEN 1 ELSE 0 END +
        CASE WHEN z3 >= 10 THEN 1 ELSE 0 END +
        CASE WHEN z4 >= 10 THEN 1 ELSE 0 END +
        CASE WHEN z5 >= 10 THEN 1 ELSE 0 END
    ) AS visit10
FROM timetable
GROUP BY userid;

逻辑解释

这个SQL的核心思路很直白:

  1. 对每个用户的每个时段字段(z0到z5),单独判断是否符合统计条件(比如>0、>=5、>=10),符合就记1,不符合记0
  2. 把每个用户的所有时段判断结果相加,得到该用户对应条件的时段数量
  3. 通过GROUP BY userid确保每个用户的统计结果单独成一行

拿用户4714举例验证:z0=0(不计数)、z1=4(>0记1)、z2=2(>0记1)、z3=0(不计数)、z4=11(>0记1、>=5记1、>=10记1)、z5=0(不计数),最终visit1=3、visit5=1、visit10=1,和你期望的结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:00:32