mysql - 如何使用 JSON 函数对 Mariadb 中的 json 字段的值求和

标签 mysql arrays json mariadb

在表列中给出以下 json 字段:

[
  {
    "payment_date":"2016-04-26",
    "amount":590,
    "payment_method":"2"
  },
  {
    "payment_date":"2017-05-01",
    "amount":208,
    "payment_method":"4"
  }
]

我怎样才能将所有金额相加?

我能到达的最远距离是

SELECT JSON_EXTRACT(`payment_lines`, '$[*].amount') FROM tbl

返回:

[590, 208]

我需要得到的是 590 和 208 的总和。也就是说,在这种情况下有两行,但可能还有更多。

SELECT VERSION();
10.2.6-MariaDB-10.2.6+maria~jessie-log

最佳答案

尝试:

MariaDB [(none)]> SELECT VERSION();
+-----------------------+
| VERSION()             |
+-----------------------+
| 10.2.6-MariaDB-10.2.6 |
+-----------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> SET @`JSON` := '
    '> [
    '>   {
    '>     "payment_date":"2016-04-26",
    '>     "amount":590,
    '>     "payment_method":"2"
    '>   },
    '>   {
    '>     "payment_date":"2017-05-01",
    '>     "amount":208,
    '>     "payment_method":"4"
    '>   }
    '> ]';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SELECT
    ->   JsonGet_Int(
    ->     JSON_EXTRACT(@`JSON`, '$[*].amount'),
    ->     '[+]'
    ->   ) `SUM`;
+------+
| SUM  |
+------+
|  798 |
+------+
1 row in set (0.00 sec)

参见 CONNECT JSON Table Type .

更新

检查:

MariaDB [(none)]> SHOW VARIABLES WHERE `Variable_name` = 'plugin_dir';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| plugin_dir    | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> \! ls -1 /usr/lib/mysql/plugin/ | grep 'ha_connect'
ha_connect.so

MariaDB [(none)]> CREATE FUNCTION IF NOT EXISTS jsonget_int RETURNS integer
    -> SONAME 'ha_connect.so';
Query OK, 0 rows affected (0.00 sec)

关于mysql - 如何使用 JSON 函数对 Mariadb 中的 json 字段的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997149/

相关文章:

php:数组键大小写*不敏感*查找?

javascript - Angular : Unable to find the index of an array

arrays - 遍历嵌套的 Json 数组

mysql - SQL返回每组单行

mysql - 为什么使用 JSON_ARRAYAGG 进行 SELECT 时会忽略 LIMIT?

python - 在numpy数组中查找最大元素比较的索引

javascript - 如何获取动态节点 JSON 值

mysql获取唯一id的行位置

php - 使用AJAX从MySQL中获取在PHP中创建的表,不带参数

C# 如何等待返回 Task<dynamic> 的方法?