MySQL JSONField 嵌套数组 SUM

标签 mysql mysql-8.0 mysql-json

我在 MySQL 8.0 数据库中有一个简单的表,如下所示:

+-----------+---------+----------+
| id        | data    |created   |
+-----------+---------+----------+
| INT       | JSON    |Timestamp |
+-----------+---------+----------+

我可以使用以下方法填充我的 JSONField:

INSERT INTO mytable (`data`) VALUES ('{
    "File": {
        "Files": {
            "Accounts": {
                "Account": [{
                    "AccountID": "11",
                    "AccountDescription": "CASH",
                    "Balance": "600.00"
                }, {
                    "AccountID": "111",
                    "AccountDescription": "Cash",
                    "Balance": "600.00"
                }]
            }
        }
    }
}');

我想要的是提取所有余额值的SUM

我试过这个:

SELECT SUM(JSON_UNQUOTE(JSON_EXTRACT(`data`, '$.File.Files.Accounts.Account[*].Balance'))) as 'result' FROM mytable WHERE id = 1;

但给出结果:

+-----------+
| result    |
+-----------+
| 0         |
+-----------+

另外,如果我去掉 SUM,结果是:

+-----------------------+
| result                |
+-----------------------+
| ["600.00", "600.00"]  |
+-----------------------+

这让我相信 JSON_UNQUOTE 也不适用于这个嵌套数组 SELECT。

我如何查询表(最好没有自定义函数)以便它给出:

+-----------+
| result    |
+-----------+
| 1200      |
+-----------+

最佳答案

为了获得所需的结果,您可以使用 MySQL 8.0 中的 JSON 表函数。它将 JSON 数据转换为表格形式。然后您可以对结果使用聚合函数。

实现相同的查询如下所示

SELECT sum(result) as result
  FROM mytable,
   JSON_TABLE(
    `data`,
     '$.File.Files.Accounts.Account[*]' COLUMNS(           
          NESTED PATH '$.Balance' COLUMNS (result DECIMAL PATH '$')           
    )
) AS jt;

下面给出了数据库 fiddle 链接
https://www.db-fiddle.com/f/vrn55vY2TMeVsVAzy9CS1w/11

可以在下面找到有关 JSON 表函数的更多信息
https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html

关于MySQL JSONField 嵌套数组 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52968055/

相关文章:

c# - MYSQL 命令可以上传到数据库的最大查询是多少?

mysql - Mysql 中的排名值

mysql - MySQL8.0无法重置root密码: windows,

mysql - 将A表数据复制到B表时出错

mysql - 如何删除数据库中超过一定数量的条目

mysql - json_table 参数不正确

mysql - mysql 5.7中JSON数据类型列中的嵌套更新查询

mysql - 如何将 MySQL JSON 数组转换为逗号分隔的字符串

mysql - 遍历数组的 mysql JSON 路径的正确语法?

php - 从 Drupal 中提取帖子