计算值之间的记录

时间:2016-09-02 16:34:56

标签: sql

我有以下查询,它为每个服务器提取最大和平均cpu和内存值。

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)的计数:

  1. '&gt; = 0&lt; = 10'
  2. '&gt; = 10&lt; = 20'
  3. '&gt; = 20 <= 30'
  4. '&gt; = 30&lt; = 40'
  5. '&gt; = 40&lt; = 50'
  6. 我试过像SUM(case when Max(CPULoad.MaxLoad) < 10 then 1 else 0 end这样的东西但我一直收到错误

      

    不能在GROUP BY子句列表中用于组的表达式中使用聚合或子查询

    我尝试在max(cpuload.maxload)中添加整个语句和GROUP BY,但它不喜欢它。

    最后,我需要按特定范围对每个服务器进行分组。即所有服务器的cpumax都在0到10之间,以及它们对应的值。

2 个答案:

答案 0 :(得分:1)

尝试使用以下查询..尚未经过测试:)

# rpm -q php-cli php-fpm
php-cli-5.6.25-1.el6.remi.x86_64
php-fpm-5.6.25-1.el6.remi.x86_64

# which php
/usr/bin/php

# php -v
PHP 5.6.25 (cli) (built: Aug 31 2016 19:26:19) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

# rpm -qf /usr/sbin/php
error: file /usr/sbin/php: No such file or directory

答案 1 :(得分:0)

通过将现有查询作为带有别名的子查询,使其成为派生表。然后使用案例构造。这是一般的想法。您可以填写详细信息。

select case when 1 = 1 then 'true' else 'false' end alias1
from 
(your query goes here) alias2