I am trying to create a SQL Query wherein it will pick all distinct records from the first column and do a count of all the items related to that column similar to a countifs command in Excel. I am new to SQL and I am really lost at this point. please help.
Sample Table:
Employee | Item | Weight |
---|---|---|
EmpA | Red Item | Light |
EmpB | Red Item | Heavy |
EmpC | Red Item | Heavy |
EmpA | Blue Item | Light |
EmpB | Red Item | Light |
EmpD | Blue Item | Light |
EmpA | Red Item | Heavy |
EmpC | Blue Item | Heavy |
EmpA | Red Item | Light |
EmpB | Red Item | Heavy |
EmpD | Red Item | Light |
EmpA | Blue Item | Light |
EmpB | Red Item | Heavy |
EmpC | Blue Item | Light |
EmpA | Red Item | Light |
EmpB | Red Item | Light |
EmpD | Red Item | Light |
Expected output:
Employee | RecordCount | Red Item | Blue Item | Light | Heavy |
---|---|---|---|---|---|
EmpA | 6 | 4 | 2 | 5 | 1 |
EmpB | 5 | 5 | 0 | 2 | 3 |
EmpC | 3 | 1 | 2 | 1 | 2 |
EmpD | 3 | 2 | 1 | 3 | 0 |
Advertisement
Answer
You would use conditional aggregation, which looks something like this:
x
select employee, count(*) as num_items,
sum(item like 'Red%'),
sum(item like 'Blue%'),
sum(weight = 'Light'),
sum(weight = 'Heavy')
from t
group by employee