在表列中给出以下 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)
更新
检查:
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/