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

如何使SUM子句针对指定ID统计总数?SQL查询问题求助

问题:按ID统计'Good'状态数与对应ID总记录数的比率

我想要获取指定ID对应的'Good'状态记录数与该ID总记录数的比率。当前使用的SQL查询在IN子句仅包含单个ID时可正常运行,但添加多个ID后,Total字段会统计所有ID的总记录数,而非单个ID的总数。需说明的是,ID并非主键,存在重复情况,统计的均为记录数量(整数)。

现有查询语句:

SELECT ID,
   COUNT (
           CASE WHEN [Status] = 'Good'
           THEN 1
           END
         ) Good,
    SUM(COUNT(*))over() as Total
    FROM TABLE
    WHERE ID IN ('ID1','ID2')
    GROUP BY ID

例如,ID1共有45条记录,其中10条状态为'Good',我希望返回10和45这两个数值,请问如何修改SUM子句使其针对单个ID统计总数?


解决方案

你不需要用窗口函数的SUM(COUNT(*))over(),因为已经按ID分组了,直接用COUNT(*)就能得到每个ID的总记录数。

修改后的SQL:

SELECT ID,
   COUNT(CASE WHEN [Status] = 'Good' THEN 1 END) AS Good,
   COUNT(*) AS Total,
   -- 可选:直接计算比率,转换为FLOAT避免整数除法
   CAST(COUNT(CASE WHEN [Status] = 'Good' THEN 1 END) AS FLOAT) / COUNT(*) AS GoodRatio
FROM TABLE
WHERE ID IN ('ID1','ID2')
GROUP BY ID

说明:

  • COUNT(CASE WHEN [Status] = 'Good' THEN 1 END):仅统计当前ID下状态为'Good'的记录,不满足条件的行返回NULL,COUNT会忽略NULL值。
  • COUNT(*):分组后统计的是当前ID对应的所有记录数,正好是你需要的单个ID总数。
  • 如果你需要直接得到比率,把Good的统计值转成FLOAT(或对应数据库的浮点类型),避免整数除法导致结果被截断为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:27:39