2014-05-21 10:48 GMT-03:00 Pedro B. Alves <pedroalve...@gmail.com>:

> Estou fazendo assim:
>
> SELECT EXTRACT(MONTH FROM datapedido) as mes, EXTRACT(YEAR FROM
> datapedido), COUNT(id)
>   FROM pedidos
>
> só que os meses que não possui pedidos ele não traz registro.
>

Você pode fazer da seguinte forma:

CREATE OR REPLACE FUNCTION pedidos_mes(dt_ini date, dt_fim date)
RETURNS TABLE(month integer, year integer, count integer)
LANGUAGE SQL
AS $$
SELECT mes, ano, sum(count)
  FROM (
    SELECT EXTRACT(MONTH FROM datapedido) AS mes, EXTRACT(YEAR FROM
datapedido) AS ano, COUNT(id) AS count
      FROM pedidos
      WHERE datapedido BETWEEN dt_ini AND dt_fim
      GROUP BY ano, mes
    UNION ALL
    SELECT EXTRACT(MONTH FROM dt), EXTRACT(YEAR FROM dt), 0
     FROM generate_series(date_trunc('month', dt_ini), date_trunc('month',
dt_fim), interval '1 month');
  ) t
 ORDER BY ano, mes
 GROUP BY ano, mes
$$;

Dessa forma você pega tudo disponível na tabela e usa o generate_series
para gerar as datas (nesse caso primeiro dia de cada mês) que não estão lá.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a