Максимальная сумма, как вычислить?
вот проблема, хочу вычислить максимальную сумму, но так нельзя)
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
