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

如何修改SQL查询,使NumGraficos显示Referencia的去重总数?

解决SQL查询中NumGraficos显示去重Referencia总数的问题

看起来你需要把NumGraficos列改成显示整个结果集中去重后的Referencia总数,我来帮你调整SQL并解释原因:

原查询的问题分析

你原来的查询里,GROUP BY子句包含了hrg.idRegisto(这应该是hRegGeometrias表的唯一行标识)以及hrg.x1、hrg.x2、hrg.x3、hrg.x4这些可能每行都不同的字段,这会导致每个分组只能包含一行数据。所以COUNT(hg.Referencia)返回的自然是1,因为每个分组里只有一个Referencia值。

方案一:使用窗口函数直接计算全局总数

最简单的方式是用窗口函数COUNT(DISTINCT ...) OVER (),它会计算整个查询结果范围内去重后的Referencia总数,并把这个值附加到每一行:

SELECT 
    hg.referencia AS Referencia, 
    hg.toleInf AS Min, 
    hg.toleSup AS Max, 
    ROUND(CAST((hrg.x1+hrg.x2+hrg.x3+hrg.x4)/4 AS FLOAT),2) AS X, 
    COUNT(DISTINCT hg.referencia) OVER () AS NumGraficos 
FROM hRegGeometrias hrg 
JOIN hGeometria hg ON hrg.idGeometria = hg.idGeom 
WHERE hrg.idMatriz = 2 
GROUP BY hg.referencia, hg.toleInf, hg.toleSup, hrg.x1, hrg.x2, hrg.x3, hrg.x4, hrg.idRegisto 
ORDER BY Referencia, hrg.idRegisto ASC

这样无论你的分组如何,每一行的NumGraficos都会显示整个结果集里去重后的Referencia总数(也就是你期望的2)。

方案二:拆分查询应对关联混乱

如果因为表关联关系复杂导致窗口函数无法正常工作,你可以拆分查询,先计算总数再关联到原结果:

WITH RefCount AS (
    -- 先计算符合条件的去重Referencia总数
    SELECT COUNT(DISTINCT hg.referencia) AS TotalRefs
    FROM hRegGeometrias hrg 
    JOIN hGeometria hg ON hrg.idGeometria = hg.idGeom 
    WHERE hrg.idMatriz = 2
)
SELECT 
    hg.referencia AS Referencia, 
    hg.toleInf AS Min, 
    hg.toleSup AS Max, 
    ROUND(CAST((hrg.x1+hrg.x2+hrg.x3+hrg.x4)/4 AS FLOAT),2) AS X, 
    rc.TotalRefs AS NumGraficos 
FROM hRegGeometrias hrg 
JOIN hGeometria hg ON hrg.idGeometria = hg.idGeom 
-- 把总数表和原结果做交叉关联,每行都带上总数
CROSS JOIN RefCount rc
WHERE hrg.idMatriz = 2 
GROUP BY hg.referencia, hg.toleInf, hg.toleSup, hrg.x1, hrg.x2, hrg.x3, hrg.x4, hrg.idRegisto, rc.TotalRefs
ORDER BY Referencia, hrg.idRegisto ASC

这个方法通过CTE先单独计算出总数,再通过CROSS JOIN把总数附加到每一行,避免了复杂关联带来的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:21:04