统计《幸存者》节目参赛者的最高出镜季数时,核心难点在于处理同一参赛者在同季中多次出现的情况,需要先完成同季去重,再进行分组统计才能得到准确结果。

数据处理前提
首先假设我们有一张存储参赛者出镜记录的表survivor_appearance,表结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| contestant_id | int | 参赛者唯一ID |
| season_id | int | 节目季数ID |
| appearance_date | date | 出镜日期 |
其中同一个contestant_id和season_id的组合可能在表中出现多条记录,对应同一参赛者在同季的多次出镜,这部分数据就是需要去重的对象。
统计步骤拆解
第一步:同季数据去重
先对contestant_id和season_id的组合进行去重,得到每个参赛者参与过的所有不重复季数记录,这一步可以使用DISTINCT关键字实现。
第二步:分组统计参赛季数
基于去重后的结果,按照contestant_id分组,统计每个参赛者对应的不同season_id数量,这个数量就是该参赛者的实际出镜季数。
第三步:获取最高出镜季数
对第二步得到的参赛季数结果取最大值,即可得到所有参赛者中的最高出镜季数。
完整SQL实现示例
以下是完整的统计SQL代码,可直接在支持标准SQL的数据库中运行:
-- 先去重同季重复记录,再统计每个参赛者的出镜季数,最后取最大值
SELECT MAX(season_count) AS max_appearance_season
FROM (
-- 统计每个参赛者的不重复出镜季数
SELECT contestant_id, COUNT(DISTINCT season_id) AS season_count
FROM (
-- 先对contestant_id和season_id组合去重,剔除同季多次出镜的重复数据
SELECT DISTINCT contestant_id, season_id
FROM survivor_appearance
) AS distinct_season_record
GROUP BY contestant_id
) AS contestant_season_stat;
结果验证说明
如果需要查看具体是哪个参赛者达到了最高出镜季数,可以调整查询逻辑,先获取最高季数的值,再匹配对应的参赛者信息:
-- 查询达到最高出镜季数的参赛者信息
WITH contestant_season_stat AS (
SELECT contestant_id, COUNT(DISTINCT season_id) AS season_count
FROM (
SELECT DISTINCT contestant_id, season_id
FROM survivor_appearance
) AS distinct_season_record
GROUP BY contestant_id
),
max_season AS (
SELECT MAX(season_count) AS max_count
FROM contestant_season_stat
)
SELECT s.contestant_id, s.season_count
FROM contestant_season_stat s
JOIN max_season m ON s.season_count = m.max_count;
通过上述方法,就可以准确统计出《幸存者》节目参赛者的最高出镜季数,完全避免了同季多次出镜带来的统计误差。