You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何统计年访问次数超1次的客户总量及SQL语句修改

解决方法:统计每年访问次数超1次的客户总数

你的问题核心是没有在合适的阶段筛选出访问次数超过1次的客户,同时外层查询的分组逻辑不符合最终需求(你要的是年度总数,不是按访问次数拆分的明细)。我们可以通过两个关键修改来实现目标:

1. 在子查询中用HAVING筛选访问次数>1的客户

子查询原本是计算每个客户每年的访问次数,我们可以直接在这里加上HAVING count(*) > 1,提前过滤掉访问次数≤1的客户,减少后续计算的数据量——这也正好解决了SQL提示你需要用HAVING子句的问题(聚合函数的筛选必须用HAVING,不能用WHERE)。

2. 调整外层查询的分组与统计逻辑

外层不需要再按num_visits分组,只需要按年份分组,统计符合条件的客户总数即可。

修改后的完整SQL

select 
    date_visit as 'Date',
    count(cst_mobile) as 'Customer Amount' 
from ( 
    select 
        LEFT(CONVERT(datetime2, datevisit, 120), 4) as date_visit,
        v.cst_mobile,
        count(*) as num_visits 
    from users v 
    where class_user='Premium' 
      and cst_id != 0 
      and cst_mobile not like '%000000%' 
      and cst_mobile!='' 
    group by LEFT(CONVERT(datetime2, datevisit, 120), 4), cst_mobile
    -- 新增HAVING子句,筛选访问次数超过1次的客户
    HAVING count(*) > 1
) v 
group by date_visit 
order by date_visit desc

效果说明

对应你给出的2020年示例数据,执行后会直接返回该年份访问次数超1次的客户总量:2258+804+166+56 = 3284,完全符合你的统计需求。

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

火山引擎 最新活动