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

如何获取子查询过滤前后的行数?无法使用CTE的解决方案

解决方案

要同时获取子查询过滤前的总行数,以及分组过滤后的结果行数,且脚本第一条必须为SELECT语句,可采用以下几种方式:

方式一:嵌套子查询直接统计

通过两个独立子查询分别计算两个数值,在同一SELECT语句中返回:

SELECT
  (SELECT COUNT(fname) FROM @table) AS 过滤前行数,
  (SELECT COUNT(*)
   FROM (
       SELECT fname
       FROM @table
       GROUP BY LEFT(fname, 3)
       HAVING COUNT(*) = 2
   ) AS Filtered) AS 过滤后行数

方式二:窗口函数一次性计算

利用窗口函数在分组统计的同时,计算全局总行数和过滤后的结果行数,最后去重得到单一结果:

SELECT DISTINCT
  SUM(COUNT(*)) OVER() AS 过滤前行数, -- 所有分组行数之和即为过滤前总行数
  COUNT(*) OVER() AS 过滤后行数       -- 过滤后的分组数量
FROM @table
GROUP BY LEFT(fname, 3)
HAVING COUNT(*) = 2

方式三:临时表适配“SELECT开头”限制

如果脚本必须以SELECT开头(无法提前声明表变量),可将数据导入临时表后再统计:

SELECT
  (SELECT COUNT(fname) FROM #temp) AS 过滤前行数,
  (SELECT COUNT(*)
   FROM (
       SELECT fname
       FROM #temp
       GROUP BY LEFT(fname, 3)
       HAVING COUNT(*) = 2
   ) AS Filtered) AS 过滤后行数
FROM (
    SELECT * INTO #temp
    FROM (
        VALUES
        ('Joe A', 1),
        ('Joe M', 1),
        ('Bob K', 2),
        ('Bob J', 2),
        ('Joe Z', 4)
    ) AS t(FName, EmpId)
) AS Init
DROP TABLE #temp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:20:33