我有下表:
CREATE TABLE Kittens (
k_id INTEGER PRIMARY KEY AUTOINCREMENT,
human_name text,
tags json
);
使用此数据
INSERT INTO Kittens (human_name, tags) VALUES ("Charles",'["fiendish", "fluffy", "quiet", "discerning", "catlike"]');
INSERT INTO Kittens (human_name, tags) VALUES ("Tails",'["fluffy", "loud","catlike"]');
INSERT INTO Kittens (human_name, tags) VALUES ("Mittens",'["fluffy","regal","catlike"]');
我想聚合常见的小猫标签,我相信这需要json_group_array功能,我在这里读到了这个:
但是,这似乎并没有像我期望的那样展开或聚合标签,只是连续列出列表。
sqlite> select json_group_array(tags) from Kittens;
["[\"fiendish\", \"fluffy\", \"quiet\", \"discerning\", \"catlike\"]","[\"fluffy\", \"loud\",\"catlike\"]","[\"fluffy\",\"regal\",\"catlike\"]"]
有关此查询应该是什么样子的任何指导?寻求更像的东西:
tag_array
catlike
catlike
catlike
discerning
fiendish
fluffy
fluffy
fluffy
loud
quiet
regal
最终,聚合:
tag_array count(*)
fluffy 3
catlike 3
fiendish 1
discerning 1
loud 1
regal 1
quiet 1
答案 0 :(得分:2)
json_group_array()
从其元素构造一个数组;要从数组中提取值,请使用json_each()
:
SELECT tag, count(*)
FROM (SELECT j.value AS tag
FROM Kittens
CROSS JOIN json_each(Kittens.tags) AS j)
GROUP BY tag;