mysql - 统计sql中的json标签
问题描述
我有这个 json 字符串
[{"count": 9, "name": "fixkit", "label": "Repair Kit"}, {"count": 1, "name": "phone", "label": "Telefoon"}]
[{"count": 3, "name": "phone", "label": "Telefoon"}]
[{"count": 5, "name": "kunststof", "label": "Kunststof"}, {"count": 6, "name": "papier", "label": "Papier"}, {"count": 2, "name": "metaal", "label": "Metaal"}, {"count": 2, "name": "inkt", "label": "Inkt"}, {"count": 3, "name": "kabels", "label": "Kabels"}, {"count": 2, "name": "klei", "label": "Klei"}, {"count": 2, "name": "glas", "label": "Glas"}, {"count": 12, "name": "phone", "label": "Telefoon"}]
[{"count": 77, "name": "weed", "label": "Cannabis"}, {"count": 1, "name": "firework1", "label": "Vuurpijl 1"}]
并且知道我想要以下输出
Phone | Number of phones (in this case: 16)
Fixkit | Number of fixkits (in this case: 9)
我想用一个 sql 查询来做到这一点。如果您知道如何执行此操作,请提前致谢!
解决方案
如果您正在运行 MySQL 8.0,您可以将数组取消嵌套到行中json_table()
,然后过滤name
您感兴趣的 s 并聚合。
假设您的表是mytable
并且 json 列被称为js
,那将是:
select j.name, sum(j.cnt) cnt
from mytable t
cross join json_table (
t.js,
'$[*]' columns(
cnt int path '$.count',
name varchar(50) path '$.name'
)
) j
where j.name in ('phone', 'fixkit')
group by j.name
| name | cnt |
| ------ | --- |
| fixkit | 9 |
| phone | 16 |
推荐阅读
- c# - C# Timer 检查多线程是否完成失败
- html - 使用 CSS 在图像上绘制圆圈
- django - 在 Django 频道消费者中使用 asyncio.create_subprocess_shell
- php - HTML POST 表单不向 PHP 脚本发送任何数据
- javascript - 从已解决的 Promise 对象中检索值
- python - 测试请求 Modbus TCP
- javascript - 如何在没有帮助的情况下更新 Meteor 中的 div?
- javascript - 角度材料对话框预填充的输入字段未验证
- python-3.x - 串口通信编码
- react-router - React Router v4 - 路由渲染属性问题