Postgres: сколько строк являются подмножествами списка в текущей строке? - PullRequest
0 голосов
/ 07 августа 2020

Мне было сложно сформулировать заголовок этого вопроса, но в основном я хочу узнать, сколько строк являются подмножествами списка в текущей строке. Пример должен прояснить:

CREATE TABLE t (
    elements integer[] NOT NULL
);
INSERT INTO t(elements)
VALUES
('{1}'),
('{1}'),
('{2}'),
('{3}'),
('{1,2}'),
('{1,2}'),
('{2,3}');

Теперь ответ, который я ищу, должен быть

+------------+----------+
| elements   | covers   |
|------------+----------|
| [1]        | 2        | [1], [1]
| [1]        | 2        | [1], [1]
| [2]        | 1        | [2]
| [3]        | 1        | [3]
| [1, 2]     | 5        | [1], [1], [2], [1, 2], [1, 2]
| [1, 2]     | 5        | [1], [1], [2], [1, 2], [1, 2]
| [2, 3]     | 3        | [2], [3], [2, 3]
+------------+----------+

Я думаю, это должно быть сделано с помощью операторов <@ или @> . Можно ли это сделать оконной функцией? Или как еще мне легче всего это сделать?

1 Ответ

1 голос
/ 07 августа 2020

Я не думаю, что здесь помогает оконная функция. Я бы просто сделал подзапрос:

SELECT
  t_out.elements,
  (SELECT count(*) FROM t t_in WHERE t_in.elements <@ t_out.elements) AS covers
FROM t t_out;

json_agg вместо count вы можете увидеть, какие из них были покрыты.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...