【问题标题】:SQL Summing Multiple JoinsSQL求和多个连接
【发布时间】:2010-06-21 02:00:09
【问题描述】:

我将代码缩短了很多,但希望有人能了解我正在尝试做什么。需要对两个不同选择的总数求和,我尝试将它们中的每一个放在左外连接中(也尝试过内连接)。如果我在任何一个左外连接注释掉的情况下运行,我得到正确的数据,但是当我一起运行它们时,我真的搞砸了计数。所以,我知道连接可能不是从同一个表中求和数据的正确方法,我不能简单地在 where 子句中这样做,因为我注释掉的代码中涉及其他表。

我想我想将 2 个不同的查询加在一起。

SELECT  eeoc.EEOCode AS 'Test1',
        SUM(eeosum.Col_One) AS 'Col_One',

FROM EEO1Analysis eeo
    LEFT OUTER JOIN (
        SELECT eeor.AnalysisID, eeor.Test1,
                SUM(CASE eeor.ZZZ WHEN 1 THEN (CASE eeor.AAAA WHEN 1 THEN 1 ELSE 0 END) ELSE 0 END) AS 'Col_One',
        FROM EEO1Roster eeor
            ..........
        WHERE  eeor.AnalysisID = 7 
        GROUP BY eeor.AnalysisID, eeor.EEOCode
    ) AS eeosum2 ON eeosum2.AnalysisID = eeo.AnalysisID
    LEFT OUTER JOIN (
        SELECT eeor.AnalysisID, eeor.Test1,
                SUM(CASE eeor.ZZZ WHEN 1 THEN (CASE eeor.AAAA WHEN 1 THEN 1 ELSE 0 END) ELSE 0 END) AS 'Col_One',
        FROM EEO1Roster eeor
            ........
    ) AS eeosum ON eeosum.AnalysisID = eeo.AnalysisID 

WHERE  eeo.AnalysisID = 7
GROUP BY eeoc.Test1

【问题讨论】:

  • 您的示例有点令人困惑:两个子查询似乎相同。

标签: sql sum join dataset


【解决方案1】:

您可以将所有 2 个查询联合起来,然后执行 SUM + GROUP BY 即

SELECT Col1, Col2, SUM(Col_One) FROM
     (SELECT Col1, Col2, SUM(Col_One) 
          FROM Table1 
          WHERE <Conditionset1> 
          GROUP BY Col1, Col2
     UNION ALL
     SELECT Col1, Col2, SUM(Col_One)
          FROM Table1 
          WHERE <Conditionset2> 
          GROUP BY Col1, Col2)
GROUP BY
     Col1, Col2

当然,如果有返回的行,它们将被重复计算。

【讨论】:

    【解决方案2】:

    怎么样

    SELECT ... FROM EEO1Analysis eeo,
    
      (SELECT ... LEFT OUTER JOIN ... GROUP BY ... ) AS data
    
    ...     
    

    ?

    而且,如果可以的话,我建议将数据准备到单独的表中,然后使用不同的分析 ID 对它们进行操作。至少可以节省一些执行时间。

    【讨论】:

      【解决方案3】:

      需要从两个不同的选择中求和 如果你期望一行单列的结果,这种方式就足够了

      SELECT 
         ((SELECT SUM(...) FROM ... GROUP BY...) + 
         (SELECT SUM(...) FROM ... GROUP BY...)) as TheSumOfTwoSums
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 2020-10-11
        相关资源
        最近更新 更多