使用SQLite将面板数据转换为时间序列数据的查询方法
解决scores表纵向数据转横向的SQL查询问题
你需要把每个赛事(fight_id)、裁判(judge_id)、回合(round)下的两名拳手分数合并到同一行,用条件聚合就能实现,具体SQL语句如下:
SELECT fight_id, judge_id, round, MAX(CASE WHEN fighter_id = 1866 THEN n_points END) AS fighter_1866_points, MAX(CASE WHEN fighter_id = 896 THEN n_points END) AS fighter_896_points FROM scores GROUP BY fight_id, judge_id, round ORDER BY round;
逻辑说明:
- 按
fight_id、judge_id、round分组,确保每个组对应同一回合、同一裁判下的两名拳手数据 - 用
CASE语句匹配指定拳手ID,提取对应的分数,未匹配的记录会返回NULL - 聚合函数
MAX会自动忽略NULL值,取出每个组内对应拳手的唯一分数(因为每个分组下每个拳手只有一条记录,用MIN或SUM效果一样)
执行后就能得到你想要的输出格式,完美匹配样本数据的结果。
内容的提问来源于stack exchange,提问作者HJA24
相关产品推荐
相关产品推荐

