Postgresql

將按條件過濾的聚合值添加到現有查詢

  • June 28, 2020

我有這張表從物聯網設備收集數據:

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;

看:

引用自:https://dba.stackexchange.com/questions/270005