2016-12-06 5 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

関連する問題