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

如何实现SQL统计从未出席任何活动的人员总数?

统计从未出席活动的人员总数

问题背景

现有存储人员活动出席状态的表,数据如下:

人员活动状态
Ethan WilliamsNoShow
Ethan WilliamsNoShow
Olivia RodriguezArrived
Olivia RodriguezNoShow
Olivia RodriguezNoShow
Benjamin ChenArrived
Benjamin ChenNoShow
Isabella GomezNoShow

需求是统计**从未出席任何活动(所有记录均为NoShow)**的人员总数,预期结果为2(Ethan Williams和Isabella Gomez)。原代码仅能列出符合条件的人员,无法直接统计数量。

原代码问题分析

原代码使用COUNT(DISTINCT CASE...)做差值判断,逻辑冗余且绕远路——我们只需要判断某人员是否从未出现过Arrived状态即可,不需要计算两种状态的去重计数差值。

解决方案

以下两种写法都能直接得到目标总数:

方法1:分组筛选后统计(兼容性强)

先分组筛选出所有状态均为NoShow的人员,再统计这些人员的数量:

SELECT COUNT(*) AS NeverAttendedCount
FROM (
    SELECT "Person"
    FROM TABLE
    GROUP BY "Person"
    -- 核心判断:该人员的活动记录中,Arrived状态的数量为0
    HAVING SUM(CASE WHEN EventStatus = 'Arrived' THEN 1 ELSE 0 END) = 0
) AS FilteredPersons

方法2:排除有过出席记录的人员(更简洁)

先找出所有有过Arrived记录的人员,再统计不在这个集合里的人员数量:

SELECT COUNT(DISTINCT "Person") AS NeverAttendedCount
FROM TABLE
WHERE "Person" NOT IN (
    SELECT DISTINCT "Person"
    FROM TABLE
    WHERE EventStatus = 'Arrived'
)

说明

两种方法都能返回预期结果2,其中方法1的分组判断逻辑更直观,适合需要同时查看人员名单的场景;方法2的子查询逻辑更简洁,适合仅需要统计数量的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:52:35