我使用 PostgreSQL。给定一组组,例如:
CREATE TABLE IF NOT EXISTS t (
id INTEGER NOT NULL,
value TEXT NOT NULL
);
INSERT INTO t (id, value) VALUES
(1, 'A'),
(1, 'B'),
(2, 'B'),
(2, 'A'),
(3, 'A'),
(4, 'A'),
(4, 'B'),
(4, 'C');
我希望计算每组的行数并获得以下结果:
{'A', 'B'}: 2
{'A'}: 1
{'A', 'B', 'C'}: 1
我找到了
group_concat
MySQL 或string_agg
PostgreSQL 的函数:http://sqlfiddle.com/#!9/42f994/3
您可以使用
string_agg()
聚合字符串。但是您想要的结果显示arrays。为此使用更简单array_agg()
的。无论哪种方式,您都需要聚合两次以获得所需的结果:
通常,在子查询中使用一次会更快
ORDER BY
,而不是将其添加到聚合函数中(这会导致每组一个排序):db<>在这里摆弄
看: