【问题标题】:Can I count the occurences for postgres array field?我可以计算 postgres 数组字段的出现次数吗?
【发布时间】:2020-01-20 14:23:33
【问题描述】:

我有一个 postgres 表,它使用数组类型的数据,它允许一些魔法,可以避免拥有更多的表,但是它的非标准性质使得初学者更难以操作。 我想从中获取一些摘要数据。

示例内容:

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

【问题讨论】:

  • ct277 的计数为 1,而不是 2
  • @gmb 这就是为什么我需要一种 sql 方式来做到这一点:)

标签: sql arrays postgresql count unnest


【解决方案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   |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2015-09-20
    相关资源
    最近更新 更多