在postgres 9.5.3中,如果没有值来填充某些存储桶,则width_bucket()
返回的数量少于指定数量的存储桶。有没有办法让这些空桶出现?
CREATE TEMP TABLE metrics (val INT);
INSERT INTO metrics (val) VALUES(1), (2), (3), (8), (10);
SELECT width_bucket(val, 1, 10, 9) FROM metrics;
返回:
width_bucket
------------
1
2
3
8
10
答案 0 :(得分:3)
width_bucket()
并不完全返回所有存储桶。它返回分配每个值的存储桶。如果没有为存储桶分配值,则不会返回该存储桶值。
它不会丢失桶。存储桶中根本没有数据。
如果要计算存储桶的大小 - 并包含所有存储桶 - 然后使用generate_series()
生成存储桶:
SELECT g.n, COUNT(m.val)
FROM generate_series(1, 10) g(n) LEFT JOIN
metrics m
ON width_bucket(val, 1, 10, 9) = g.n
GROUP BY g.n
ORDER BY g.n;