Avatar billede Mik2000 Professor
18. august 2022 - 02:09 Der er 4 kommentarer og
2 løsninger

MariaDB SUM() JSON

Hej

Jeg har et JSON felt i en MariaDB som indeholder JSON f.eks.:
{"prisEksklMoms":100,"moms":25,"prisInklMoms":125}
Det er et felt der ikke kan ændres så de ligger i hver deres felt, så er ikke interesseret i løsninger der går på det :)

Jeg vil så gerne kunne hente en SUM af f.eks. prisInklMoms
Normalt vil jeg kunne sige: SUM(prisInklMoms) hvis det var et felt

Men hvad gør man når det er en del af et JSON Object?

... håber der er en der kan hjælpe med en løsning der ikke er for tung og som er smart i SQL
Avatar billede arne_v Ekspert
18. august 2022 - 02:23 #1
Saa vidt jeg kan se er det lige ud af landevejen:

mysql> CREATE TABLE jsum (
    ->    id INTEGER NOT NULL,
    ->    jv JSON,
    ->    PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO jsum VALUES(1, '{"f":123}');
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO jsum VALUES(2, '{"f":456}');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT SUM(jv->>'$.f') FROM jsum;
+-----------------+
| SUM(jv->>'$.f') |
+-----------------+
|            579 |
+-----------------+
1 row in set (0.00 sec)

mysql> DROP TABLE jsum;
Query OK, 0 rows affected (0.01 sec)
Avatar billede Mik2000 Professor
18. august 2022 - 14:38 #2
Jeg får en fejl når jeg prøver
Min tabel her hedder pristabeltest og feltet med JSON hedder jsonfelt

SELECT SUM(jsonfelt->>'$.prisInklMoms') FROM pristabeltest

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '>>'$.prisInklMoms') FROM pristabeltest LIMIT 0, 25' at line 1

Serverversion: 10.5.11-MariaDB
Avatar billede arne_v Ekspert
18. august 2022 - 14:50 #3
Hvad med:

SELECT SUM(JSON_EXTRACT(jsonfelt,'$.prisInklMoms')) FROM pristabeltest

?
Avatar billede Mik2000 Professor
18. august 2022 - 14:52 #4
Yep det virker :). Tak for hjælpen
Avatar billede arne_v Ekspert
18. august 2022 - 14:57 #5
Af en eller anden mystisk grund understoetter MariaDB ikke -> og ->> som short version for JSON_EXTRACT.

Andre har undret sig:

https://stackoverflow.com/questions/60810184/extract-json-value-from-table
Avatar billede Mik2000 Professor
19. august 2022 - 16:12 #6
Okay ja det var da underligt - men dejligt det virker :)
Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester