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

如何按用户分组统计指标并计算单服务器最大事件数?

解决方案

假设你的数据表名为server_event_records,核心字段包括user(用户标识)、server(服务器标识)、event_status(事件状态,取值如success/failure),可以通过CTE(公共表表达式)+ 两层分组聚合实现需求,具体SQL如下:

WITH server_level_stats AS (
    -- 第一步:按用户+服务器分组,计算单台服务器的事件统计
    SELECT
        user,
        server,
        COUNT(*) AS server_total_events,
        SUM(CASE WHEN event_status = 'success' THEN 1 ELSE 0 END) AS server_success_events,
        SUM(CASE WHEN event_status = 'failure' THEN 1 ELSE 0 END) AS server_failure_events
    FROM server_event_records
    GROUP BY user, server
)
-- 第二步:按用户分组,聚合统计并提取单服务器最大事件数
SELECT
    user,
    COUNT(DISTINCT server) AS total_servers,
    SUM(server_total_events) AS total_events,
    SUM(server_success_events) AS total_success_events,
    SUM(server_failure_events) AS total_failure_events,
    MAX(server_total_events) AS max_events_per_single_server
FROM server_level_stats
GROUP BY user
ORDER BY user;

代码说明

  • CTE段(server_level_stats):先对每个用户下的每台服务器做子分组统计,算出单服务器的总事件数、成功/失败事件数,为后续用户层面的聚合做准备。
  • 外层查询:
    • COUNT(DISTINCT server):统计用户拥有的唯一服务器数量;
    • SUM(server_total_events):累加所有服务器的事件数,得到用户总事件数;
    • SUM(server_success_events)/SUM(server_failure_events):同理累加成功、失败事件总数;
    • MAX(server_total_events):从用户所有服务器的事件数中取最大值,即单台服务器的最大事件数。

适配调整

如果你的表结构或字段名不同,只需对应修改:

  • 替换server_event_records为实际表名;
  • 若event_status是布尔类型(比如1代表成功,0代表失败),可简化SUM逻辑:SUM(event_status)替代成功事件统计,SUM(1 - event_status)替代失败事件统计;
  • 若用户/服务器标识字段是user_id/server_id,替换相应字段名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:17:24