MySQL JSONField嵌套数组和

MySQL JSONField嵌套数组和,mysql,mysql-8.0,mysql-json,Mysql,Mysql 8.0,Mysql Json,我在MySQL 8.0数据库中有一个简单的表,如下所示: +-----------+---------+----------+ | id | data |created | +-----------+---------+----------+ | INT | JSON |Timestamp | +-----------+---------+----------+ 我可以使用以下方法填充我的JSONField: INSERT INTO mytable (

我在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"
                }]
            }
        }
    }
}');
我想要的是提取所有余额值的总和

我试过这个:

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

+-----------+
| result    |
+-----------+
| 0         |
+-----------+
另外,如果我去掉
,结果是:

+-----------------------+
| result                |
+-----------------------+
| ["600.00", "600.00"]  |
+-----------------------+
这让我相信
JSON\u 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;
DB fiddle链接如下所示

有关JSON表函数的更多信息,请参见下文

为了获得所需的结果,您可以使用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;
DB fiddle链接如下所示

有关JSON表函数的更多信息,请参见下文

工作正常。非常感谢。工作完美。非常感谢。