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

INNER JOIN结合COUNT与GROUP BY的SQL查询结果异常求助

修正SQL查询以正确统计两个表的行数

你的问题出在直接对连接后的表进行计数——内连接会将FTR和quantity中匹配Line的行进行关联,产生笛卡尔积效应,导致COUNT统计的是连接后的总行数,而非原表各自的行数。

要正确获取每个Line在两个表中的独立行数,需要先分别统计每个表的Line数量,再将结果关联:

方法1:使用子查询关联

SELECT 
    COALESCE(f.Line, q.Line) AS Line,
    f.FTR_count,
    q.quantity_count
FROM 
    (SELECT Line, COUNT(*) AS FTR_count FROM [work_permit].[dbo].[FTR] GROUP BY Line) f
FULL JOIN 
    (SELECT line, COUNT(*) AS quantity_count FROM [work_permit].[dbo].[quantity] GROUP BY line) q
ON f.Line = q.line;

方法2:使用CTE(公共表表达式)

WITH FTR_Stats AS (
    SELECT Line, COUNT(*) AS FTR_count FROM [work_permit].[dbo].[FTR] GROUP BY Line
),
Quantity_Stats AS (
    SELECT line, COUNT(*) AS quantity_count FROM [work_permit].[dbo].[quantity] GROUP BY line
)
SELECT 
    COALESCE(f.Line, q.line) AS Line,
    f.FTR_count,
    q.quantity_count
FROM FTR_Stats f
FULL JOIN Quantity_Stats q ON f.Line = q.line;

说明

  • 使用FULL JOIN可以确保即使某个Line只存在于其中一个表,也能被统计出来(如果只需要两个表都存在的Line,可以换成INNER JOIN)。
  • COALESCE用来统一显示Line字段的值,避免其中一方为NULL时显示空缺。
  • 先单独统计每个表的行数再关联,能避免连接带来的行数放大问题,得到准确的计数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:02:05