ST_Histogram — Returns a set of record summarizing a raster or raster coverage data distribution separate bin ranges. Number of bins are autocomputed if not specified.
SETOF record ST_Histogram(raster  rast, integer  nband=1, boolean  exclude_nodata_value=true, integer  bins=autocomputed, double precision[]  width=NULL, boolean  right=false);
SETOF record ST_Histogram(raster  rast, integer  nband, integer  bins, double precision[]  width=NULL, boolean  right=false);
SETOF record ST_Histogram(raster  rast, integer  nband, boolean  exclude_nodata_value, integer  bins, boolean  right);
SETOF record ST_Histogram(raster  rast, integer  nband, integer  bins, boolean  right);
SETOF record ST_Histogram(text  rastertable, text  rastercolumn, integer  nband, integer  bins, boolean  right);
SETOF record ST_Histogram(text  rastertable, text  rastercolumn, integer  nband, boolean  exclude_nodata_value, integer  bins, boolean  right);
SETOF record ST_Histogram(text  rastertable, text  rastercolumn, integer  nband=1, boolean  exclude_nodata_value=true, integer  bins=autocomputed, double precision[]  width=NULL, boolean  right=false);
SETOF record ST_Histogram(text  rastertable, text  rastercolumn, integer  nband=1, integer  bins, double precision[]  width=NULL, boolean  right=false);
Returns set of records consisting of min, max, count, percent for a given raster band for each bin. If no band is specified nband defaults to 1. 
![]()  | |
By default only considers pixel values not equal to the   | 
width double precision[]width: an array indicating the width of each category/bin. If the number of bins is greater than the number of widths, the widths are repeated.
Example: 9 bins, widths are [a, b, c] will have the output be [a, b, c, a, b, c, a, b, c]
bins integerNumber of breakouts -- this is the number of records you'll get back from the function if specified. If not specified then the number of breakouts is autocomputed.
right booleancompute the histogram from the right rather than from the left (default). This changes the criteria for evaluating a value x from [a, b) to (a, b]
Availability: 2.0.0
SELECT band, (stats).*
FROM (SELECT rid, band, ST_Histogram(rast, band) As stats
    FROM dummy_rast CROSS JOIN generate_series(1,3) As band
     WHERE rid=2) As foo;
 band |  min  |  max  | count | percent
------+-------+-------+-------+---------
    1 |   249 |   250 |     2 |    0.08
    1 |   250 |   251 |     2 |    0.08
    1 |   251 |   252 |     1 |    0.04
    1 |   252 |   253 |     2 |    0.08
    1 |   253 |   254 |    18 |    0.72
    2 |    78 | 113.2 |    11 |    0.44
    2 | 113.2 | 148.4 |     4 |    0.16
    2 | 148.4 | 183.6 |     4 |    0.16
    2 | 183.6 | 218.8 |     1 |    0.04
    2 | 218.8 |   254 |     5 |     0.2
    3 |    62 | 100.4 |    11 |    0.44
    3 | 100.4 | 138.8 |     5 |     0.2
    3 | 138.8 | 177.2 |     4 |    0.16
    3 | 177.2 | 215.6 |     1 |    0.04
    3 | 215.6 |   254 |     4 |    0.16SELECT (stats).*
FROM (SELECT rid, ST_Histogram(rast, 2,6) As stats
    FROM dummy_rast
     WHERE rid=2) As foo;
    min     |    max     | count | percent
------------+------------+-------+---------
         78 | 107.333333 |     9 |    0.36
 107.333333 | 136.666667 |     6 |    0.24
 136.666667 |        166 |     0 |       0
        166 | 195.333333 |     4 |    0.16
 195.333333 | 224.666667 |     1 |    0.04
 224.666667 |        254 |     5 |     0.2
(6 rows)
-- Same as previous but we explicitly control the pixel value range of each bin.
SELECT (stats).*
FROM (SELECT rid, ST_Histogram(rast, 2,6,ARRAY[0.5,1,4,100,5]) As stats
    FROM dummy_rast
     WHERE rid=2) As foo;
  min  |  max  | count | percent
-------+-------+-------+----------
    78 |  78.5 |     1 |     0.08
  78.5 |  79.5 |     1 |     0.04
  79.5 |  83.5 |     0 |        0
  83.5 | 183.5 |    17 |   0.0068
 183.5 | 188.5 |     0 |        0
 188.5 |   254 |     6 | 0.003664
(6 rows)