赛事选手胜负次数统计解决方案 #嘿,这就帮你搞定这个赛事数据统计的需求!针对你给出的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。排序规则:最后按照参赛总次数降序排列,总次数相同的选手按姓名排序(让结果更规整)。预期输出结果 #姓名获胜次数失败次数参赛总次数Roy134Bob123Joe213Mary112Ellen101José101内容的提问来源于stack exchange,提问作者Rick Tucker