2017-07-09 89 views
0

給予表列如下JSON場總結從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 
+0

您正在使用什麼版本MariaDB的的? – wchiquito

+0

10.2.6-MariaDB-10.2.6 + maria〜jessie-log – spacebiker

回答

1

嘗試:

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

UPDATE

檢查:

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) 
+0

感謝您的回答。但我得到以下錯誤:'#1305 - 功能tbl.JsonGet_Int不存在' – spacebiker

+0

@spacebiker:查看更新的答案。 – wchiquito

+0

plugin_dir:/ usr/lib/mysql/plugin /和ls/usr/lib/mysql/plugin /正確列出ha_connect.so。 – spacebiker