如何将转换后的行汇总并集中到一个具有相同 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 的字段中?的主要内容,如果未能解决你的问题,请参考以下文章
如何组合 pandas df 以便可以合并具有置换 col1 和 col2 值的行,其中仅包含一个组合并汇总计数列