sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres json nyckeltal

CREATE TABLE test (id INT4 PRIMARY KEY, some_name TEXT, j json);
copy test FROM stdin;
01  TEST1   {"key1" : "value1", "key2": "value2", "key4": "value4"}
02  TEST1   {"key1" : "value1"}
03  TEST2   {"key1" : "value1", "key2": "value2", "key3":"value3"}
\.
with unpacked as (
    SELECT (json_each_text(j)).* FROM test
)
SELECT value, count(*) FROM unpacked WHERE key in ('key1', 'key2', 'key3') group by value;

Returnerar:

 value  | count 
--------+-------
 value1 |     3
 value3 |     1
 value2 |     2
(3 rows)

Att returnera det som du visade verkar inte vara en bra idé (vad skulle du vilja göra om det finns 4 miljarder olika värden?), men du kan alltid pivotera i din app eller ändra frågan för att göra pivoteringen.




  1. Hitta och ersätt en del av texten i ett fält med MySQL

  2. Är det möjligt att använda retur i lagrat förfarande?

  3. mysql-php frågar efter en lista för att bygga en tabell

  4. Filtrera rader i en kolumn baserat på uppställda regler i SQL