Skip to content
Advertisement

how to do sum with multiple joins in PostgreSQL?

I know that my question would be duplicated but I really don’t know how to created sql which return results of sum with multiple join.

Tables I have

result_summary

num_bin id_summary count_bin
   3        172       0
   4        172       0
   5        172       0
   6        172       0
   7        172       0
   8        172       0
   1        174       1
   2        174       0
   3        174       0
   4        174       0
   5        174       0
   6        174       0
   7        174       0
   8        174       0
   1        175       0

summary_assembly

num_lot id_machine sabun  date_work   date_write id_product shift count_total count_fail count_good id_summary id_operation
 adfe      1       21312  2020-11-25  2020-11-25    1        A        10        2             8          170        2000
 adfe      1       21312  2020-11-25  2020-11-25    1        A      1000        1           999          171        2000
 adfe      1       21312  2020-11-25  2020-11-25    2        A       100        1            99          172        2000
 333       1       21312  2020-12-06  2020-12-06    1        A        10        2             8          500        2000
 333       1       21312  2020-11-26  2020-11-26    1        A     10000        1          9999          174        2000
 333       1       21312  2020-11-26. 2020-11-26    1        A       100        0           100          175        2000
 333       1       21312  2020-12-06  2020-12-06    1        A        10        2             8          503        2000
 333       1       21312  2020-12-07  2020-12-07    1        A        10        2             8          651        2000
 333       1       21312  2020-12-02  2020-12-02    1        A        10        2             8          178        2000

employees

sabun   name_emp
3532    Kim
12345   JS
4444    Gilsoo
21312   Wayn Hahn
123     Lee too
333     JD

info_product

id_product  name_product   
     1         typeA
     2         typeB

machine

id_machine   id_operation    name_machine
  1              2000           name1
  2              2000           name2
  3              2000           name3
  4              3000           name1
  5              3000           name2
  6              3000           name3
  7              4000           name1
  8              4000           name2
 

query

select S.id_summary, I.name_product, M.name_machine, 
E.name_emp, S.sabun, S.date_work, 
S.shift, S.num_lot, S.count_total, 
S.count_good, S.count_fail, 
sum(case num_bin when '1' then count_bin else 0 end) as bin1, 
sum(case num_bin when '2' then count_bin else 0 end) as bin2, 
sum(case num_bin when '3' then count_bin else 0 end) as bin3, 
sum(case num_bin when '4' then count_bin else 0 end) as bin4, 
sum(case num_bin when '5' then count_bin else 0 end) as bin5, 
sum(case num_bin when '6' then count_bin else 0 end) as bin6, 
sum(case num_bin when '7' then count_bin else 0 end) as bin7, 
sum(case num_bin when '8' then count_bin else 0 end) as bin8 
from result_assembly as R
join summary_assembly as S on R.id_summary = S.id_summary 
join employees as E on S.sabun = E.sabun 
join info_product as I on S.id_product = I.id_product 
join machine as M on S.id_machine = M.id_machine 
where I.id_product = '1' 
and E.sabun='21312' 
and S.shift = 'A' 
and S.date_work between '2020-11-10' and '2020-12-20' 
group by S.id_summary, E.name_emp, S.num_lot,
I.name_product,M.name_machine
order by S.id_summary;

result

id_summary name_product name_machine name_emp sabun date_work shift num_lot count_total count_good count_fail bin1 bin2 bin3 bin4 bin5 bin6 bin7 bin8
170           TypeA        name1        Kim   21312 2020-11-25  A   adfe        10           8          2      1    1    0    0    0    0     0   0
171           TypeA        name1        Kim   21312 2020-11-25  A   adfe      1000         999          1      1    1    0    0    0    0     0   0
174           TypeA        name1        Kim   21312 2020-11-26  A   333      10000        9999          1      1    1    0    0    0    0     0   0
175           TypeA        name1        Kim   21312 2020-11-26  A   333        100         100          0      0    0    0    0    0    0     0   0
178           TypeA        name1        Kim   21312 2020-12-02  A   333         10           8          2      1    1    0    0    0    0     0   0
179           TypeA        name1        Kim   21312 2020-12-02  A   333         10           8          2      1    1    0    0    0    0     0   0
180           TypeA        name1        Kim   21312 2020-12-02  A   333         10           8          2      1    1    0    0    0    0     0   0
181           TypeA        name1        Kim   21312 2020-12-02  A   333         10           8          2      1    1    0    0    0    0     0   0
182           TypeA        name2        Kim   21312 2020-12-02  A   333         10           8          2      1    1    0    0    0    0     0   0
186           TypeA        name2        Kim   21312 2020-12-06  A   333         10           8          2      1    1    0    0    0    0     0   0
193           TypeA        name2        Kim   21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0
194           TypeA        name2        Kim   21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0
195           TypeA        name2        Kim   21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0
196           TypeA        name2        JS    21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0
197           TypeA        name2        JS    21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0
198           TypeA        name2        JS    21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0
199           TypeA        name2        JS    21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0
200           TypeA        name2        JS    21312 2020-12-06  A   333         10           8          2      0    0    0    0    0    0     0   0

expected output(when sum by num_lot)

 num_lot count_total count_good count_fail bin1 bin2 bin3 bin4 bin5 bin6 bin7 bin8
   adfe     323          300        23      22    1   0    0    0   0     0   0
   333     4312         4300        12      10    2   0    0    0   0     0   0
     

All of them were modified from original one because they were non-English, so there would be typo.

Here now I need to sum by num_lot, name_product or sabun. id_summary is unique.

Thanks

Advertisement

Answer

As expected in the comments: It seems like you simple need a subquery which groups your table by the column num_lot

SELECT 
    num_lot, 
    SUM(count_total), 
    SUM(count_good)
    -- some more SUM()
FROM (
    --<your query>
) s 
GROUP BY num_lot

It was asked in the comments what the s stands for: A subquery needs an alias, an identifier. Because I didn’t want to think about a better name, I just called the subselect s. It is the shortcut for AS s

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement