php - 如何按一些 id 分组并对所有行 json 编码数据求和
问题描述
I have Faced group by some id and Sum other column json_encode data in select query MySQL.
But how to sum total json data value?
Please help Anyone...
使用它,PHP 7.2、Mysql 5 和 Apache 2。
I am try code
> SELECT `fk_club_id`,`adpoints`,`actpoints`,(JSON_OBJECT('actpoints',
> actpoints, 'adpoints', adpoints)) FROM (SELECT `fk_club_id`,
> SUM(JSON_EXTRACT("$.adpoints")) as adpoints,
> SUM(JSON_EXTRACT("$.actpoints")) as actpoints FROM club_scoresheet
> where status= 1 GROUP BY `fk_club_id`) as t
我的表数据,
id | JSON column() 15 ['5','6','2'] 15 ['5','6','2'] 28 ['5','6','1'] 28 ['5','6','1'] 28 ['5','6','1']
这是我的桌子
我的预期结果,
id | JSON column( total) 15 26 28 36
预期结果
解决方案
在 MySQL 5.7 版中,引入了 JSON 函数可以解决您的问题。您可以使用以下内容,但它仅允许在您的 JSON 中包含固定数量的项目时检索总和。您的示例指出每个 JSON 数组中有 3 个项目,所以您应该没问题:
SELECT ID, SUM(CAST(JSON_EXTRACT(JSON,'$[0]') AS UNSIGNED)+CAST(JSON_EXTRACT(JSON,'$[1]') AS UNSIGNED)+CAST(JSON_EXTRACT(JSON,'$[2]') AS UNSIGNED)) AS TOTAL FROM TEST GROUP BY ID;
如果要升级到 MySQL 8,还可以使用新的 JSON_TABLE 函数来处理 JSON 数组中的任意数量的项目:
SELECT TEST.ID,SUM(t.VAL) AS TOTAL FROM TEST, JSON_TABLE(JSON, '$[*]' COLUMNS(VAL INT PATH '$')) t GROUP BY ID
您也可以在这个 db fiddle中对此进行测试。
推荐阅读
- python - 如何修复IndexError:python中的字符串索引超出范围
- java - 无法运行 java 文件(修复类路径时遇到问题)
- python-3.x - 如何修复:提交 Python 代码时,预期为 2 输出,但在 PASTA 上得到 0
- lightbox2 - 如何在 Lightbox v2.10.0 中链接 Youtube 视频
- docker - mesos + marathon组合中服务ip变化的解决方法能告诉我吗?
- java - 在杰克逊序列化后避免列表的类型信息
- angular - 异步修改数组 observable 中的每一项,并返回修改后的 observable
- javascript - 每隔几分钟编辑同一条消息
- php - 如何使用 PHP 代码将 XML 结果转换为 JSON 数组或 PHP 数组
- java - Postman 中应使用 ',' 而不是 't'