我可以计算 postgres 数组字段的出现次数吗?

Can I count the occurences for postgres array field?

我有一个 table postgres,它使用数组类型的数据,它允许一些魔法使避免有更多的 tables 成为可能,但它的非标准性质使得它对于初学者来说更难操作。 我想从中获取一些摘要数据。

示例内容:

CREATE TABLE public.cts (
    id serial NOT NULL,
    day timestamp NULL,
    ct varchar[] NULL,
    CONSTRAINT ctrlcts_pkey PRIMARY KEY (id)
);

INSERT INTO public.cts
(id, day, ct)
VALUES(29, '2015-01-24 00:00:00.000', '{ct286,ct281}');
INSERT INTO public.cts
(id, day, ct)
VALUES(30, '2015-01-25 00:00:00.000', '{ct286,ct281}');
INSERT INTO public.cts
(id, day, ct)
VALUES(31, '2015-01-26 00:00:00.000', '{ct286,ct277,ct281}');

我想求出每个数组成员出现的总和,输出如下:

name | value 
ct286 | 3
ct281 | 3
ct277 | 1

使用Postgres function array unnest():

SELECT name, COUNT(*) cnt
FROM cts, unnest(ct) as u(name)
GROUP BY name

Demo on DB Fiddle:

| name  | cnt |
| ----- | --- |
| ct277 | 1   |
| ct281 | 3   |
| ct286 | 3   |