Re: Subquery problems - Mailing list pgsql-sql

From Masaru Sugawara
Subject Re: Subquery problems
Date
Msg-id 20070622230811.E58E.RK73@ghost.plala.or.jp
Whole thread Raw
In response to Subquery problems  (Ranieri Mazili <ranieri.oliveira@terra.com.br>)
List pgsql-sql
On Thu, 21 Jun 2007 14:46:49 -0300
Ranieri Mazili <ranieri.oliveira@terra.com.br> wrote:

Hi,

I noticed that if DIV_MES = 0 (= NULL) then the previous query
didn't go well. I rewrite the query. It's including a check statement
to replace NULL with 1.
At first, you need to create a table of months.

--
Masaru Sugawara



create table tbl_month (p_month integer);
insert into tbl_month values (1);
insert into tbl_month values (2);
insert into tbl_month values (3);
insert into tbl_month values (4);
insert into tbl_month values (5);
insert into tbl_month values (6);
insert into tbl_month values (7);
insert into tbl_month values (8);
insert into tbl_month values (9);
insert into tbl_month values (10);
insert into tbl_month values (11);
insert into tbl_month values (12);


select  C.id_production_area, B.id_machine_type, A.h_month as month, max(A.n) as div_mes,
cast((sum(A.qty_employees_total)         -(sum(A.qty_absence)          -sum(A.qty_vacation)
-sum(A.qty_diseased)         -sum(A.qty_indirect)          -sum(A.qty_transferred))
+sum(A.qty_received))/max(A.n)as integer)
 
from (select *         from (select *,                     extract(month from h1.head_count_date) as h_month
  from head_count as h1              where extract(year from h1.head_count_date)                     = extract(year
fromcurrent_date)             ) as h2,             (select t1.p_month, coalesce (p1.n, 1) as n                from
tbl_monthas t1 left outer join                    (select extract(month from production_date) as m,
      count(distinct p0.production_date) as n                       from production as p0                      where
extract(yearfrom production_date)                             = extract(year from current_date)
groupby extract(month from production_date)                    ) as p1 on (t1.p_month = p1.m)              ) as p2
 where h2.h_month = p2.p_month    ) as A, machine B, machine_type C
 
where  A.id_machine = B.id_machine     and B.id_machine_type = C.id_machine_type
group by C.id_production_area, B.id_machine_type, A.h_month
order by C.id_production_area, A.h_month, A.h_month DESC;




> Hello,
> 
> Your solution works fine, I would appreciated your prompt reply.
> Thanks a lot
> 
> 
> -------- Original Message  --------
> Subject: Re:[SQL] Subquery problems
> From: Masaru Sugawara <rk73@ghost.plala.or.jp>
> To: Ranieri Mazili <ranieri.oliveira@terra.com.br>
> Date: 21/6/2007 13:25
> > On Tue, 19 Jun 2007 09:17:22 -0300
> > Ranieri Mazili <ranieri.oliveira@terra.com.br> wrote:
> >
> > Hi,
> >
> > This reply is not accurate, but I think there are helpful hints.
> >
> > --
> > Masaru Sugawara
> >
> >
> >
> >
> > select 
> >   C.id_production_area,
> >   B.id_machine_type,
> >   A.h_month as month,
> >   max(A.n) as div_mes,
> >   cast((sum(A.qty_employees_total)
> >            -(sum(A.qty_absence)
> >            -sum(A.qty_vacation)
> >            -sum(A.qty_diseased)
> >            -sum(A.qty_indirect)
> >            -sum(A.qty_transferred))
> >            +sum(A.qty_received))/max(A.n) as integer)
> > from (select * 
> >        from  
> >        (select *, extract(month from h1.head_count_date) as h_month
> >            from head_count as h1
> >            where extract(year from h1.head_count_date) 
> >                = extract(year from current_date)
> >         ) as h2,
> >         (select extract(month from production_date) as p_month,
> >            count(distinct p1.production_date) as n
> >            from production as p1
> >            where extract(year from production_date) 
> >                = extract(year from current_date)
> >            group by extract(month from production_date)
> >          ) as p2
> >      where h2.h_month = p2.p_month
> >   ) as A, machine B, machine_type C
> > where  A.id_machine = B.id_machine
> >        AND B.id_machine_type = C.id_machine_type
> > group by C.id_production_area, B.id_machine_type, A.h_month
> > order by C.id_production_area, A.h_month, A.h_month DESC;
> >
> >
> >
> >
> >
> >   



pgsql-sql by date:

Previous
From: Wei Weng
Date:
Subject: Re: [Fwd: 47G file]
Next
From: "A. R. Van Hook"
Date:
Subject: Re: join problem