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

SQL分组拼接实现:按年份统计胜负场次并格式化为W-L形式

正确SQL写法及解释

核心思路

直接通过年份分组,结合CASE WHEN和聚合函数COUNT分别统计每年的胜场、负场,最后用字符串拼接函数组合成W-L格式(不同数据库拼接语法略有差异,以下以SQL Server和MySQL为例)。

SQL Server 版本

SELECT
    YEAR(Date) AS GameYear,
    CONCAT(
        COUNT(CASE WHEN Result = 'W' THEN 1 END),
        '-',
        COUNT(CASE WHEN Result = 'L' THEN 1 END)
    ) AS WinLossRecord
FROM GameSummaries
GROUP BY YEAR(Date)
ORDER BY GameYear;

错误原因解析

  1. Msg 207: Invalid column name 'Date':分组时不能直接引用原始Date列(它包含具体日期,不是分组维度),必须用提取年份的表达式(比如YEAR(Date)),且GROUP BY子句要和SELECT里的年份表达式完全一致。
  2. Msg 116:你之前的写法大概率在SELECT中使用了返回多列的子查询,但非EXISTS场景下子查询只能返回单列。改用CASE WHEN结合聚合函数,可直接在分组查询内完成统计,规避子查询的问题。

MySQL 适配版本

SELECT
    YEAR(Date) AS GameYear,
    CONCAT(
        COUNT(CASE WHEN Result = 'W' THEN 1 END),
        '-',
        COUNT(CASE WHEN Result = 'L' THEN 1 END)
    ) AS WinLossRecord
FROM GameSummaries
GROUP BY YEAR(Date)
ORDER BY GameYear;

补充说明

  • 确认Result字段的胜/负取值为明确的'W'和'L',若存在平局(如'T')等其他状态,上述查询会自动忽略,需调整逻辑可自行扩展CASE WHEN分支。
  • 若Date字段存在NULL值,可通过YEAR(ISNULL(Date, '1900-01-01'))(SQL Server)或YEAR(IFNULL(Date, '1900-01-01'))(MySQL)处理,但通常比赛日期不会为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:15:27