我可以计算 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
| name | cnt |
| ----- | --- |
| ct277 | 1 |
| ct281 | 3 |
| ct286 | 3 |
我有一个 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
| name | cnt |
| ----- | --- |
| ct277 | 1 |
| ct281 | 3 |
| ct286 | 3 |