统计两列中值的匹配次数(分别统计):赛事结果表胜负及参赛次数统计
赛事选手胜负次数统计解决方案
嘿,这就帮你搞定这个赛事数据统计的需求!针对你给出的Results表,我们可以通过SQL的CTE(公共表表达式)和联合查询来轻松得到想要的统计结果,具体实现如下:
实现SQL代码
WITH win_counts AS ( SELECT 胜者 AS 姓名, COUNT(*) AS 获胜次数 FROM Results GROUP BY 胜者 ), loss_counts AS ( SELECT 败者 AS 姓名, COUNT(*) AS 失败次数 FROM Results GROUP BY 败者 ) SELECT COALESCE(w.姓名, l.姓名) AS 姓名, COALESCE(w.获胜次数, 0) AS 获胜次数, COALESCE(l.失败次数, 0) AS 失败次数, COALESCE(w.获胜次数, 0) + COALESCE(l.失败次数, 0) AS 参赛总次数 FROM win_counts w FULL OUTER JOIN loss_counts l ON w.姓名 = l.姓名 ORDER BY 参赛总次数 DESC, 姓名;
代码说明
- win_counts:这个CTE专门统计每个选手作为胜者的获胜次数,通过对
胜者字段分组并计数得到。 - loss_counts:这个CTE统计每个选手作为败者的失败次数,同理对
败者字段分组计数。 - FULL OUTER JOIN:用来合并两个统计结果,确保那些只有胜场或者只有败场的选手也能被纳入统计(比如Ellen和José只有胜场,没有败场)。
- COALESCE函数:用来处理NULL值,把没有胜场或败场的选手对应次数填充为0,避免结果出现NULL。
- 排序规则:最后按照
参赛总次数降序排列,总次数相同的选手按姓名排序(让结果更规整)。
预期输出结果
| 姓名 | 获胜次数 | 失败次数 | 参赛总次数 |
|---|---|---|---|
| Roy | 1 | 3 | 4 |
| Bob | 1 | 2 | 3 |
| Joe | 2 | 1 | 3 |
| Mary | 1 | 1 | 2 |
| Ellen | 1 | 0 | 1 |
| José | 1 | 0 | 1 |
内容的提问来源于stack exchange,提问作者Rick Tucker
相关产品推荐
相关产品推荐

