У меня есть следующий запрос, который вытягивает максимальные и средние значения процессора и памяти для каждого сервера.Count Записи между значениями
SELECT
Nodes.Caption, Max(CPULoad.MaxLoad) as CPUMax,
AVG(CPULoad.AvgLoad) as CPUAvg,
Round(Max(CPULoad.MaxMemoryUsed/CPULoad.TotalMemory * 100),2) as MemMax,
Round(AVG(CPULoad.AvgPercentMemoryUsed),2) as MEMAvg
FROM
Nodes
INNER JOIN
CPULoad ON Nodes.NodeID = CPULoad.NodeID
WHERE
Datetime >= DATEADD(MONTH,datediff(MONTH,0,getdate())-1,0)
AND Datetime < DATEADD(MONTH,datediff(MONTH,0,getdate()),0)
GROUP BY Nodes.Caption
Теперь нужно выяснить следующее.
Подсчет каждого значения (cpumax, cpuavg, memmax, memavg), которые находятся между следующими диапазонами:
- '> = 0 < = 10'
- '> = 10 < = 20'
- '> = 20 = < 30'
- '> = 30 < = 40'
- '> = 40 < = 50'
Я пытался что-то вроде SUM(case when Max(CPULoad.MaxLoad) < 10 then 1 else 0 end
), но я получаю сообщение об ошибке
Невозможно использовать агрегат или подзапрос в выражении используется для группы по списку в предложения GROUP BY
I попытался добавить как весь оператор, так и только max(cpuload.maxload)
в GROUP BY
, но ему это не нравится.
Наконец, мне нужно сгруппировать каждый из серверов по определенным диапазонам. То есть все серверы, которые имеют cpumax от 0 до 10 вместе с их соответствующим значением.
Что RDBMS вы используете? Совокупные значения над некоторыми разделами данных могут быть достигнуты с помощью функций Windows, например, в [PostgreSQL] (https://www.postgresql.org/docs/current/static/tutorial-window.html). –