Home > Enterprise >  Why is my group by not grouping my values as expected?
Why is my group by not grouping my values as expected?

Time:09-30

My project is a clothes factory and I have 3 tables.

  1. Person : A table that contains people's name
  2. Category : Contains each category of clothes in the factory (sockets, shoes, etc.)
  3. Quantity : The quantity of clothes for each person
SELECT  Name,
    sum(case when category = 'shoes' then quantity else 0 end) as 'Quantity_shoes',
    sum(case when category = 'shirts' then quantity else 0 end) as 'Quantity_shirts',
    sum(case when category = 'sockets' then quantity else 0 end) as 'Quantity_shirts',
    sum(case when category = 'hats' then quantity else 0 end) as 'Quantity_hats'
FROM person p
    join inventory i 
     on i.person_id = p.id
    join category c
      c.id = i.category_id
WHERE p = 'Paul'
GROUP BY name,
     category

And I'm trying to display something like this :

Name Quantity_shoes Quantity_shirts Quantity_sockets Quantity_hats
Paul 8 25 38 0

But my result isn't that I expected... I got this :

Name Quantity_shoes Quantity_shirts Quantity_sockets Quantity_hats
Paul 8 0 0 0
Paul 0 0 0 0
Paul 0 25 0 0
Paul 0 0 38 0

It seems that I have one row for each category. So I tried to groupbyquantity but it doesn't sum my quantity and I have more rows.

What I am doing wrong?

CodePudding user response:

As suggested in the above try this (I am guessing the column in person with the name is p.name in which case you may not even need the group by name):

SELECT
    Name,
    sum(case when category = 'shoes' then quantity else 0 end) as 'Quantity_shoes',
    sum(case when category = 'shirts' then quantity else 0 end) as 'Quantity_shirts',
    sum(case when category = 'sockets' then quantity else 0 end) as 'Quantity_shirts',
    sum(case when category = 'hats' then quantity else 0 end) as 'Quantity_hats'
FROM
    person p
    join inventory i on i.person_id = p.id
    join category c.id = i.category_id
WHERE
    p.name = 'Paul'
  •  Tags:  
  • sql
  • Related