【问题标题】:Mysql return total capacity for each VM in stats tableMysql 返回统计表中每个虚拟机的总容量
【发布时间】:2018-10-03 01:36:37
【问题描述】:

我有一个表,其中包含 215 个虚拟机的数据行。每行有以下信息VM名称、日期戳、磁盘、容量、吞吐量、iops等。

每个虚拟机将有一个或多个磁盘,这意味着对于每个日期戳,每个虚拟机的每个日期戳可能有不止一行数据。

我需要的是每个 VM 的总磁盘容量的结果。我从哪个日期戳中获取数据并不重要,因为每个日期戳通常保持相同。然而,并不是所有的虚拟机都存在于每个日期戳中。

这就是我尝试过的。

查询尝试 1:

SELECT DISTINCT `VM`, SUM(CapacityGB) as cap FROM stats Group By `VM`

这里的问题是我得到了每个虚拟机的结果,但不是单个日期戳的容量总和,而是该虚拟机的所有日期戳的总和,这意味着容量非常高

查询尝试 2:

SELECT DISTINCT `VM`,`datestamp`, SUM(CapacityGB) as cap FROM stats Group By `VM`,`datestamp`

此查询为我提供了正确的容量结果,但我得到了每个 VM 的每个日期戳的一行(我有 215 个 vm,它返回 394701 行,因为我每隔 10 分钟就有大约 2 周的统计数据)

所以我想要的是混合的,每个 VM 有 1 行结果。有什么指点吗?

【问题讨论】:

    标签: mysql select distinct


    【解决方案1】:

    您可以将第二个查询包装为子查询并选择capMAX 值(应该与其他任何一个相同),按VM 分组:

    SELECT VM, MAX(cap)
    FROM (SELECT `VM`,`datestamp`, SUM(CapacityGB) as cap 
          FROM stats 
          GROUP BY `VM`,`datestamp`) s
    GROUP BY VM
    

    【讨论】:

    • 这很好用。而且超级快!我很感激尼克
    • 不用担心。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 2020-05-24
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2018-10-18
    相关资源
    最近更新 更多