mysql返回stats表中每个vm的总容量

tkqqtvp1  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(277)

我有一个表,其中包含215个vm的数据行。每行包含以下信息:vm名称、日期戳、磁盘、容量、吞吐量、iops等。
每个虚拟机将有一个或多个磁盘,这意味着对于每个日期戳,每个虚拟机每个日期戳可能有多行数据。

我需要的是每个虚拟机的总磁盘容量的结果。我从哪个日期戳获取数据并不重要,因为每个日期戳的数据通常保持不变。然而,并不是所有的虚拟机都存在于每个日期戳中。
这就是我尝试过的。
查询尝试1:

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

这里的问题是,我得到了每个vm的结果,但不是单个日期戳的容量总和,而是该vm的所有日期戳的总和,这意味着容量太大了

查询尝试2:

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

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

所以我想要的是一个混合,每个虚拟机1行的结果。有什么建议吗?

hk8txs48

hk8txs481#

您可以将第二个查询 Package 为子查询并选择 MAX 的价值 cap (应与其他任何一个相同),分组方式 VM :

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

相关问题