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

如何通过SQL按月份统计Type为Yes的行占比?

解决按月份统计Type="Yes"占比的SQL问题

原SQL的核心问题是直接把字符串类型的Type转成INT会报错,因为"Yes"/"No"无法直接转换。只需要修改求和的部分,把字符串判断后转成数值即可,以下是修正后的代码:

SELECT 
    CONCAT(DATEPART(MONTH, Date), '/', DATEPART(YEAR, Date)) AS Month,
    CAST(1.0 * SUM(CASE WHEN Type = 'Yes' THEN 1 ELSE 0 END) / COUNT(*) AS DECIMAL(5,2)) AS Percentage
FROM 
    [table]  -- 注意table是SQL关键字,建议用方括号包裹或更换表名
GROUP BY 
    DATEPART(YEAR, Date), DATEPART(MONTH, Date)
ORDER BY 
    DATEPART(YEAR, Date), DATEPART(MONTH, Date)

修改说明:

  • 替换了原代码中SUM(CAST(Type AS INT))为SUM(CASE WHEN Type = 'Yes' THEN 1 ELSE 0 END):通过CASE表达式将"Yes"映射为1,"No"映射为0,这样就能正常求和统计符合条件的行数。
  • 调整了日期格式:用CONCAT拼接月份和年份,得到你需要的1/2013这种格式(如果需要两位月份比如01/2013,可以用RIGHT('0' + CAST(DATEPART(MONTH, Date) AS VARCHAR), 2)代替DATEPART(MONTH, Date))。
  • 修正了原SQL的语法错误:原代码中CAST(1.00*SUM(...) / COUNT(*) AS DECIMAL(5,2)缺少闭合括号,同时移除了不需要的Year、Month、Passes、Total列(如果需要保留可以加回去)。
  • 给表名table加了方括号:因为table是SQL保留关键字,直接使用会报错。

测试结果:

用你提供的示例数据运行,会返回:

MonthPercentage
1/20130.50
2/20131.00

如果需要百分比不带小数末尾的0,可以把DECIMAL(5,2)改成FLOAT或者调整精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:36:28