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

SQL技术问询:如何统计指定日期下所有FilledBy值均为0的患者总数及列值总和为0的表的去重记录计数

问题1:如何从某列总和为0的表中获取去重记录的计数?

分两种常见场景给你解决方案:

  • 场景1:按分组统计,分组内目标列总和为0
    比如有一张Orders表,包含CustomerId(客户ID)和Amount(订单金额),要统计所有订单金额总和为0的客户数量:

    SELECT COUNT(DISTINCT CustomerId) AS ZeroTotalCustomerCount
    FROM Orders
    GROUP BY CustomerId
    HAVING SUM(Amount) = 0;
    

    这里用GROUP BY按客户分组,HAVING SUM(Amount) = 0筛选出总和为0的客户组,最后用COUNT(DISTINCT)统计去重的客户数量(如果每个客户仅对应一个分组,直接用COUNT(*)也可以)。

  • 场景2:整个表的目标列总和为0,统计某列的去重记录数
    如果是整个表的目标列总和为0,要统计另一列的去重数量,直接用COUNT(DISTINCT)即可:

    SELECT COUNT(DISTINCT TargetColumn) AS DistinctCount
    FROM YourTable
    WHERE SUM(Amount) OVER () = 0;
    

    这种场景比较少见,通常还是分组统计的需求更普遍。


问题2:统计指定日期下所有CheckListActivity记录FilledBy均为0的患者总数

先说说你原来查询的问题:你的语句只筛选了FilledBy = 0的记录再分组,这会把那些有部分记录FilledBy为0但存在非0记录的患者(比如测试数据里的103)也统计进去,不符合“所有记录FilledBy均为0”的要求。

下面给你两种高效的解决方法:

方案1:使用NOT EXISTS(逻辑清晰,推荐)

SELECT COUNT(DISTINCT p.PatientId) AS PatientCnt
FROM [dbo].[da.Patient] p
WHERE CONVERT(Date, p.DischargeDate) = '2021-05-02'
  AND NOT EXISTS (
      SELECT 1
      FROM [dbo].[da.CheckListActivity] cla
      WHERE cla.PatientId = p.PatientId
        AND cla.FilledBy <> 0
  );

逻辑说明:

  1. 先筛选出2021-05-02出院的患者;
  2. 用NOT EXISTS检查该患者是否存在任何一条FilledBy不等于0的记录——如果不存在,说明该患者所有检查记录的FilledBy都是0,符合条件;
  3. 最后统计这类患者的去重数量。

方案2:使用GROUP BY + HAVING(适合聚合统计场景)

SELECT COUNT(DISTINCT cla.PatientId) AS PatientCnt
FROM [dbo].[da.CheckListActivity] cla
JOIN [dbo].[da.Patient] p 
  ON cla.PatientId = p.PatientId
WHERE CONVERT(Date, p.DischargeDate) = '2021-05-02'
GROUP BY cla.PatientId
HAVING COUNT(CASE WHEN cla.FilledBy <> 0 THEN 1 END) = 0;

逻辑说明:

  1. 关联患者表和检查活动表,筛选出指定日期出院患者的所有检查记录;
  2. 按患者分组,用CASE语句统计每组中FilledBy不等于0的记录数;
  3. HAVING子句筛选出“非0记录数为0”的分组,也就是所有记录FilledBy都是0的患者;
  4. 最后统计这些患者的数量。

这两种方案都能得到你期望的结果:PatientCnt = 2(对应患者102、104)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:02:37