Postgresql
將按條件過濾的聚合值添加到現有查詢
我有這張表從物聯網設備收集數據:
CREATE TABLE public.conferimenti ( id bigint NOT NULL DEFAULT nextval('conferimenti_id_seq'::regclass), codicestazione smallint NOT NULL, codicetag character varying(20) COLLATE pg_catalog."default" NOT NULL, dataora timestamp without time zone NOT NULL, peso numeric(10,2) NOT NULL DEFAULT 0.0, tiporifiuto smallint NOT NULL, data character varying COLLATE pg_catalog."default" )
我正在做一個包含權重總和的 MATERIALIZED VIEW:
SELECT time_bucket('1 day'::interval, c.dataora) AS dataora, c.codicestazione, c.idcomune, sum(c.peso) AS totale_peso_conferimenti, count(c.id) AS totale_conferimenti FROM conferimenti c GROUP BY 1, c.codicestazione, c.idcomune
我需要添加另一個名為“totale_peso_conferimento_tipo”的列,其中
SUM(c.peso)
只有行where tiporifiuto = 0
。目前我正在使用 2 個單獨的查詢。也許可以使用視窗函式來完成?
聽起來你想要聚合
FILTER
子句:SELECT time_bucket('1 day'::interval, c.dataora) AS dataora , c.codicestazione , c.idcomune , count(c.id) AS totale_conferimenti , sum(c.peso) AS totale_peso_conferimenti **, sum(c.peso) FILTER (WHERE tiporifiuto = 0) AS totale_peso_conferimento_tipo** FROM conferimenti c GROUP BY 1, c.codicestazione, c.idcomune;
看: