我有一张表,其中每条记录都有一个指标和一个范围,我想知道每个指标的范围所涵盖的总点差 - 但是当某个指标的范围重叠时,不会重复计算。
我可以看到措辞难以理解,但这个概念非常简单。让我举一个说明性的例子。
CREATE TABLE records(id int, spread int4range);
INSERT INTO records VALUES
(1, int4range(1, 4)),
(1, int4range(2, 7)),
(1, int4range(11, 15)),
(2, int4range(3, 5)),
(2, int4range(6, 10));
SELECT * FROM records;
产生输出:
id | spread
----+---------
1 | [1,4)
1 | [2,7)
1 | [11,15)
2 | [3,5)
2 | [6,10)
(5 rows)
我现在想要一个提供以下输出的查询:
id | total
---+--------
1 | 10
2 | 6
数字10和6来自哪里?对于ID 1,我们的范围包括1,2,3,4,5,6,11,12,13和14;共有10个不同的整数。对于ID 2,我们的范围包括3,4,6,7,8和9;共有六个不同的整数。
如果它可以帮助您理解问题,您可以将其想象为“如果这些记录代表我日历上会议的日期和时间范围,那么我每天预订的总时数是多少一次?“
Postgres版本是9.4.8,如果重要的话。
答案 0 :(得分:3)
perform