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

如何对比行与前一行检测胜负切换?基于points表的SQL实现

统计单场比赛每局的胜负切换次数

现有SQL表points,结构如下:

CREATE TABLE "points" (
    "match_id"    INTEGER,
    "player_id"   INTEGER,
    "opponent_id" INTEGER,
    "set"         INTEGER,
    "point"       INTEGER,
    "won"         INTEGER
);

我们需要针对单个玩家,对比其每一分的won值与前一分的won值,统计每场比赛每局的胜负切换次数n_switches。

举个例子:当某局的won数组为[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]时,胜负切换次数为3。

给出的部分查询语句存在一处错误(prev_player_id应为prev.player_id),我们可以在此基础上完善查询,最终按match_id和set分组得到如下预期输出:

match_idsetn_switches
37346937112
3734693724
3734693738

完善后的SQL查询

-- 替换目标玩家ID为你要分析的player_id值,比如123
SELECT 
    cur.match_id, 
    cur.set, 
    SUM(CASE WHEN cur.won != prev.won THEN 1 ELSE 0 END) AS n_switches
FROM points cur 
LEFT JOIN points prev 
    ON cur.match_id = prev.match_id
    AND cur.player_id = prev.player_id
    AND cur.set = prev.set
    AND cur.point = prev.point + 1
WHERE cur.player_id = 目标玩家ID -- 这里指定单个玩家
GROUP BY cur.match_id, cur.set;

关键说明

  1. 修正原JOIN条件的错误:将prev_player_id改为prev.player_id,确保关联同一场比赛、同一玩家、同一局的前一分数据。
  2. 用CASE WHEN判断当前分与前一分的胜负是否切换,每切换一次计1分。
  3. 通过SUM()累加每局的切换次数,最终按match_id和set分组输出结果。
  4. WHERE子句指定要分析的单个玩家,替换成实际玩家ID即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:42:40