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

SQL Server如何添加带条件的行统计列?

实现每行展示全局统计值的SQL方案

要在每行中返回全表级的统计值,核心是利用不带分区的窗口函数,对整个数据集进行条件统计。以下是具体实现方式:

通用SQL写法(兼容所有主流数据库)

假设你的表名为patient_records,可以用CASE表达式结合窗口函数实现需求:

SELECT 
    Name,
    PAT_ID,
    Has_T,
    Has_Y,
    Has_G,
    COUNT(*) OVER () AS Total_PATS, -- 全表总行数
    SUM(CASE WHEN Has_T = 'X' THEN 1 ELSE 0 END) OVER () AS Total_T, -- Has_T为'X'的行数
    SUM(CASE WHEN Has_Y = 'X' THEN 1 ELSE 0 END) OVER () AS Total_Y -- Has_Y为'X'的行数
FROM patient_records;

逻辑说明

  • COUNT(*) OVER ():你已用到的方式,窗口函数不指定分区时,会对整个数据集计数,得到全表总行数。
  • SUM(CASE...) OVER ():通过CASE将符合条件的行标记为1,不符合的标记为0,再对全表求和,最终得到符合条件的总行数。

可选简洁写法(部分数据库支持)

如果使用PostgreSQL、BigQuery等支持FILTER子句的数据库,可用更直观的语法:

SELECT 
    Name,
    PAT_ID,
    Has_T,
    Has_Y,
    Has_G,
    COUNT(*) OVER () AS Total_PATS,
    COUNT(*) FILTER (WHERE Has_T = 'X') OVER () AS Total_T,
    COUNT(*) FILTER (WHERE Has_Y = 'X') OVER () AS Total_Y
FROM patient_records;

这种写法可读性更强,但CASE的写法兼容性更广,适合跨数据库场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:45:25