2017-07-09 2 views
0

Geben Sie das folgende json Feld in einer Tabellenspalte zusammenzuzufassen:Wie Werte aus einem json Feld in MariaDB mit JSON Funktionen

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

Wie kann ich alle Beträge summiert?

Die weitest ich bekommen konnte ist

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

, die zurückgibt:

[590, 208] 

Was würde ich bekommen muß, ist diese Summe von 590 und 208. Damit in diesem Fall zu sagen, es gibt zwei Reihen, aber es könnte noch viel mehr geben.

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

Welche Version von MariaDB verwenden Sie ?. – wchiquito

+0

10.2.6-MariaDB-10.2.6 + Maria ~ jessie-log – spacebiker

Antwort

1

Versuchen:

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 See.

UPDATE

Check:

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

Danke für die Antwort. Aber ich bekomme den folgenden Fehler: '# 1305 - FUNKTION tbl.JsonGet_Int existiert nicht' – spacebiker

+0

@spacebiker: Siehe aktualisierte Antwort. – wchiquito

+0

plugin_dir:/usr/lib/mysql/plugin/und ls/usr/lib/mysql/plugin/listet ha_connect.so korrekt auf. – spacebiker