首页 > 解决方案 > SUM() 正在计算所有值,而不是满足条件的值

问题描述

我有以下查询要写:

知道一支球队将至少从一名球员的出售中赚取给定球员的市场价值(WartoscRynkowa)并知道他的转会金额(KwotaTransferu),通过出售最高球员来计算球队将获得或损失多少转会机会(> = 2)(SzansaNaTransfer),为每个满足上述条件的玩家提供数据(玩家数据,金额),并为所有这些玩家提供价值;

以下是表格: 在此处输入图像描述

我做了如下查询:

SELECT *, Imie+' '+Nazwisko AS ImieNazwisko,
                                            (SELECT SUM(WartoscRynkowa) -SUM(KwotaTransferu)
                                            FROM Beata.dane
                                            ) AS Result
FROM Beata.dane AS D
JOIN Beata.team AS T
ON D.NumerKoszulki = T.NumerKoszulki
WHERE SzansaNaTransfer >= 1

在此处输入图像描述

结果 130 是错误的,因为它也计算了玩家。应该是 33,因为 WartoscRynkowa(市值)的总和是 215 减去 KwotaTransferu(交易量)- 182 = 33

为什么查询还计算不满足条件“>=1”的玩家数量

编辑:我已经更新了查询并得到以下结果。如何总结另一列中的总值(我的意思是总结所有结果)?

SELECT T.Imie, T.Nazwisko,
                                            (SELECT SUM(WartoscRynkowa) - SUM(KwotaTransferu)
                                            FROM Beata.dane NAD
                                            WHERE NAD.WartoscRynkowa = D.WartoscRynkowa
                                            ) AS Result
FROM Beata.dane AS D
JOIN Beata.team AS T
ON D.NumerKoszulki = T.NumerKoszulki
WHERE SzansaNaTransfer >= 2

在此处输入图像描述

标签: sqlsql-server

解决方案


我发现这个问题很难理解,不理解列名是什么。我认为你不需要聚合来解决这个问题,但你需要一种计算总数的方法——窗口函数是一种方法:

SELECT (t.Imie + ' ' + t.Nazwisko) AS ImieNazwisko,
       (WartoscRynkowa - KwotaTransferu) as Result,
       SUM(WartoscRynkowa - KwotaTransferu) OVER () as overall_total
FROM Beata.dane D JOIN 
     Beata.team AS T
     ON D.NumerKoszulki = T.NumerKoszulki
WHERE SzansaNaTransfer >= 2;

推荐阅读