基于pymssql的多表SQL查询:选手赛事数据聚合输出需求
整合查询实现选手赛事信息的聚合与格式化输出
完整解决方案代码
# 执行整合后的聚合查询 cursor.execute(""" SELECT c.Name, CASE WHEN c.Region = 'PNW' THEN 'Pacific Northwest' ELSE 'Southwest' END AS Full_Region, AVG(o.RaceTime) AS Avg_RaceTime, COUNT(DISTINCT o.RaceID) AS Race_Count FROM Contestant c INNER JOIN Outcome o ON c.ID = o.ID GROUP BY c.ID, c.Name, c.Region ORDER BY Avg_RaceTime DESC; """) # 按要求格式输出结果 for row in cursor: print(f"{row[0]} {row[1]} {row[2]:.3f} {row[3]}")
逻辑拆解
- 表关联:用
INNER JOIN关联Contestant(别名c)和Outcome(别名o),通过选手ID匹配,只保留有参赛记录的选手数据。 - 地区转换:在查询中用
CASE语句直接完成缩写到全名的转换,无需单独查询处理。 - 聚合计算:
AVG(o.RaceTime)计算平均赛事用时,COUNT(DISTINCT o.RaceID)统计参赛次数(去重避免同赛事重复计数)。 - 分组排序:按选手ID、姓名、地区分组确保唯一选手的聚合结果,
ORDER BY Avg_RaceTime DESC实现按平均用时从高到低排序。 - 格式输出:用f-string格式化输出,
{row[2]:.3f}保证平均用时保留三位小数,字段间用三个空格分隔,匹配预期格式。
输出示例
Smith Pacific Northwest 59.454 7 Kohl Southwest 54.203 4
内容的提问来源于stack exchange,提问作者data_life
相关产品推荐
相关产品推荐

