如何将转换后的行汇总并集中到一个具有相同 ID 的字段中?

Posted

技术标签:

【中文标题】如何将转换后的行汇总并集中到一个具有相同 ID 的字段中?【英文标题】:How can I sum and concentrate converted rows into one field with same id? 【发布时间】:2021-07-09 01:47:51 【问题描述】:

我目前卡在 concat 具有相同 vm id 的两行 我的原始 sql 数据看起来像这样 vm_info vm_disk

我已将“数据存储”从列转换为行 这是我的sql查询,

SELECT vm.vm_info.id, 
    vm.vm_info.vm,
    vm.vm_info.vm_folder, 
  vm.vm_info.name, 
   vm.vm_info.cpu_count, 
    format(vm.vm_info.memory_size_MiB/1024,0) AS Memory_size_GiB, 
   vm_disk_convert.capacity,
    vm_disk_convert.NAS,
    vm_disk_convert.vSan,
    vm_disk_convert.vSan_intra,
    vm.vm_info.power_state, 
    vm.vm_info.modify_date
FROM vm.vm_info, (
    SELECT `vm`, `capacity`,
    case when vm.vm_disk.datastores = "NFS-SA3400" then vm.vm_disk.datastores END AS NAS,
        case when vm.vm_disk.datastores = "vsanDatastore" then vm.vm_disk.datastores END as vSan,
        case when vm.vm_disk.datastores = "vsanDatastore-Intra" then vm.vm_disk.datastores END as vSan_Intra 
    FROM vm.vm_disk
) AS vm_disk_convert
WHERE vm.vm_info.vm = vm_disk_convert.vm
ORDER BY vm.vm_info.vm_folder, vm.vm_info.vm;

我当前的 sql 结果如下所示 sql result 我曾尝试使用 group_concat 但结果显示如下

如何将具有相同 vm id 的行集中到一个字段中? Expected Result 感谢您帮助我!

【问题讨论】:

你的身份证是从哪里来的?您将它们转移到实际 > 预期中,所以不确定它们应该代表什么?您在取最大值而不是求和的字段之间也有不同的容量。需要更多关于你在这里尝试做什么的信息。 是的,我正在尝试对相同 vm id 的不同数据存储(hdd 和 ssd 在不同存储中分离)中的容量求和,并且这些 vm id 是由 vCenter 增量自动生成的。我想要实现的是将不同的数据存储连接到一行中,并对相同 vm id 中的容量求和,这样它们就不会使用相同的 vm id 显示 ram 和 cpu 资源两次。喜欢下面的链接result 简化问题,见meta.***.com/questions/333952/… vm-822 在您的实际结果中有 2 个不同的容量值,但是当您合并表时,您删除了 80,这主要是我所说的 【参考方案1】:

你可以使用 GROUP BY 语句,它会是这样的:

    SELECT vm.vm_info.id, 
    vm.vm_info.vm,
    vm.vm_info.vm_folder, 
  vm.vm_info.name, 
   vm.vm_info.cpu_count, 
    format(vm.vm_info.memory_size_MiB/1024,0) AS Memory_size_GiB, 
   vm_disk_convert.capacity,
    vm_disk_convert.NAS,
    vm_disk_convert.vSan,
    vm_disk_convert.vSan_intra,
    vm.vm_info.power_state, 
    vm.vm_info.os, 
    vm.vm_info.modify_date
FROM vm.vm_info, (
    SELECT `vm`, `capacity`,
    case when vm.vm_disk.datastores = "NFS-SA3400" then vm.vm_disk.datastores END AS NAS,
        case when vm.vm_disk.datastores = "vsanDatastore" then vm.vm_disk.datastores END as vSan,
        case when vm.vm_disk.datastores = "vsanDatastore-Intra" then vm.vm_disk.datastores END as vSan_Intra 
    FROM vm.vm_disk
) AS vm_disk_convert
GROUP BY `vm`
ORDER BY vm.vm_info.vm_folder, vm.vm_info.vm;

这个声明完全符合你的要求......如果我写错了,对不起,我会给你一个教程的链接,你可以在你的项目中使用:https://www.w3schools.com/sql/sql_groupby.asp

【讨论】:

以上是关于如何将转换后的行汇总并集中到一个具有相同 ID 的字段中?的主要内容,如果未能解决你的问题,请参考以下文章

使用dplyr汇总并保持相同的变量名称

将具有相同 id 的行合并为一行,保留所有数据

将 SQL 数据插入具有相同 ID 的行中?

如何组合 pandas df 以便可以合并具有置换 col1 和 col2 值的行,其中仅包含一个组合并汇总计数列

获取具有 stdClass 对象列的行并求和具有相同 id 的元素

从具有相同 ID 的行创建列