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

统计近一年不同登录次数用户数及现有SQL优化咨询

优化独立访客登录次数统计SQL(解决异常高次数问题)

你的SQL统计的是用户所有成功登录的记录数,而非实际的登录次数——如果一个用户短时间内多次触发登录记录(比如重复提交、系统重复日志),就会出现登录次数异常偏高的情况。核心问题是没有对同一用户的重复登录行为做去重,以下是两种针对性优化方案:

方案1:按日期去重(统计用户登录天数)

如果需求是「用户一天内多次登录只算1次」,可以先按用户ID+登录日期去重,再统计次数:

SELECT visit_count, COUNT(*) AS user_count
FROM (
    SELECT USER_ID, COUNT(DISTINCT DATE(log_time)) AS visit_count
    FROM database
    WHERE auth_succeeded = 'true' 
      AND log_time BETWEEN '2024-01-01' AND '2024-08-01'
    GROUP BY USER_ID
) AS visit_counts
GROUP BY visit_count
ORDER BY visit_count;

用COUNT(DISTINCT DATE(log_time))替换原有的COUNT(*),将同一用户同一天的所有登录记录合并为1次,最终统计的是用户的登录天数。

方案2:按登录唯一标识去重(统计实际登录事件数)

如果系统中有唯一标识每次登录请求的字段(比如login_session_id、request_id),用这个字段去重更精准,能完全排除重复日志导致的异常次数:

SELECT visit_count, COUNT(*) AS user_count
FROM (
    SELECT USER_ID, COUNT(DISTINCT login_session_id) AS visit_count
    FROM database
    WHERE auth_succeeded = 'true' 
      AND log_time BETWEEN '2024-01-01' AND '2024-08-01'
    GROUP BY USER_ID
) AS visit_counts
GROUP BY visit_count
ORDER BY visit_count;

COUNT(DISTINCT login_session_id)会统计每个用户的唯一登录会话数,完全匹配实际的登录事件次数。

排查异常记录建议

如果不确定重复记录的来源,可以先筛选出日志数异常的用户,分析具体原因:

SELECT USER_ID, COUNT(*) AS total_logs, COUNT(DISTINCT DATE(log_time)) AS distinct_days
FROM database
WHERE auth_succeeded = 'true' 
  AND log_time BETWEEN '2024-01-01' AND '2024-08-01'
GROUP BY USER_ID
HAVING COUNT(*) > 100 -- 筛选日志数异常多的用户
ORDER BY total_logs DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:12:40