Максимальная сумма, как вычислить?

вот проблема, хочу вычислить максимальную сумму, но так нельзя)

SELECT Clients.Surname, Clients.Name, Streets.Street_name + ', район ' + Streets.Area_name, MAX(SUM(Total_payments.Sum_payment)), Existing_connections.Tariff_name, Tariffs.Salary
FROM ((Existing_connections INNER JOIN
(Streets INNER JOIN 
((Total_payments INNER JOIN Housing ON Total_payments.ID_housing = Housing.ID_housing) INNER JOIN Clients ON Housing.ID_client = Clients.ID_client) ON Housing.Street_name = Streets.Street_name)
ON Existing_connections.ID_housing = Housing.ID_housing)
INNER JOIN Tariffs ON Existing_connections.Tariff_name = Tariffs.Tariff_name)
WHERE YEAR(Total_payments.Date_payment) = YEAR(GETDATE())
GROUP BY Clients.Surname, Clients.Name, Streets.Street_name + ', район ' + Streets.Area_name, Existing_connections.Tariff_name, Tariffs.Salary

Вот ошибка:

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Timur Irdyneev

совет: форматируйте sql-запрос предельно читаемым, чтобы понимать sql без вставки editor

SELECT Clients.Surname,
       Clients.Name,
       Streets.Street_name + ', район ' + Streets.Area_name,
       Existing_connections.Tariff_name,
       Tariffs.Salary,
       -- оставляем только sum и называем calculated
       SUM(Total_payments.Sum_payment) calculated
FROM ((Existing_connections INNER JOIN ...  ...))
GROUP BY Clients.Surname, Clients.Name, Streets.Street_name + ', район ' + 
  Streets.Area_name, Existing_connections.Tariff_name, Tariffs.Salary
-- предлагаю добавить сортировку по полю calculated и получить значение максимальной суммы в первой строке
ORDER BY calculated DESC
→ Ссылка
Автор решения: Aziz Umarov

Идея проста как ясный день, Вы вычисляете сначала сумму (группируете), а затем Максимум по вычисленным. так как вам нужна одна запись максималка то

попробуйте так

WITH data as (
SELECT Clients.Surname,
       Clients.Name,
       Streets.Street_name + ', район ' + Streets.Area_name AS Address,
       SUM(Total_payments.Sum_payment) AS Total_Sum_payment,
       Existing_connections.Tariff_name,
       Tariffs.Salary
FROM ((Existing_connections
       INNER JOIN (Streets
                   INNER JOIN ((Total_payments
                                INNER JOIN Housing ON Total_payments.ID_housing = Housing.ID_housing)
                               INNER JOIN Clients ON Housing.ID_client = Clients.ID_client) 
                   ON Housing.Street_name = Streets.Street_name) ON Existing_connections.ID_housing = Housing.ID_housing)
      INNER JOIN Tariffs ON Existing_connections.Tariff_name = Tariffs.Tariff_name)
WHERE YEAR(Total_payments.Date_payment) = YEAR(GETDATE())
GROUP BY Clients.Surname,
         Clients.Name,
         Streets.Street_name + ', район ' + Streets.Area_name,
         Existing_connections.Tariff_name,
         Tariffs.Salary
)
SELECT TOP 1 * 
FROM data 
ORDER BY 
Total_Sum_payment DESC
→ Ссылка