2016-12-06 3 views
1

В postgres 9.5.3, width_bucket() возвращается меньше указанного количества ведер, если для заполнения некоторых ковшей нет значений. Есть ли способ сделать эти пустые корзины?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 

ответ

2

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; 
+0

благодаря @gordon мне пришлось изменить его немного, чтобы работать с числами не в диапазоне 1-10, но идея была такая же :) – Skrealin

Смежные вопросы