2016-12-06 3 views
1

In Postgres 9.5.3, width_bucket() werden weniger als die angegebene Anzahl von Buckets zurückgegeben, wenn keine Werte zum Füllen einiger der Buckets vorhanden sind. Gibt es eine Möglichkeit, diese leeren Eimer auftauchen zu lassen?width_bucket gibt keine leeren Buckets zurück

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; 

kehrt:

width_bucket 
------------ 
      1 
      2 
      3 
      8 
      10 

Antwort

2

width_bucket() nicht genau Rückkehr alle Eimer. Es gibt den Bucket zurück, dem jeder Wert zugewiesen ist. Wenn einem Bucket keine Werte zugewiesen sind, wird dieser Bucket-Wert nicht zurückgegeben.

Es fehlt nicht Eimer. Es gibt einfach keine Daten in den Buckets.

Wenn Sie die Größe der Eimer zählen wollen - und alle von ihnen sind - erzeugen dann die Eimer generate_series() mit:

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

dank @gordon ich mit Zahlen arbeiten musste, um es ein wenig ändern nicht im Bereich 1-10, aber die Idee war das gleiche :) – Skrealin