I need to calculate percentage of hours per each project, not out of all the quantity of projects.
Here is the initial table:
| employee_id | project_id | hours |
|---|---|---|
| 999111111 | 1 | 31.4 |
| 999111111 | 2 | 8.5 |
| 999333333 | 3 | 42.1 |
| 999888888 | 1 | 21.0 |
| 999888888 | 2 | 22.0 |
| 999444444 | 2 | 12.2 |
| 999444444 | 3 | 10.5 |
| 999444444 | 1 | null |
| 999444444 | 10 | 10.1 |
| 999444444 | 20 | 11.8 |
| 999887777 | 30 | 30.8 |
| 999887777 | 10 | 10.2 |
| 999222222 | 10 | 34.5 |
| 999222222 | 30 | 5.1 |
| 999555555 | 30 | 19.2 |
| 999555555 | 20 | 14.8 |
| 999666666 | 20 | null |
Needed output:
| employee_id | project_id | percent |
|---|---|---|
| 999111111 | 1 | 60 |
| 999111111 | 2 | 20 |
| 999333333 | 3 | 80 |
| 999888888 | 1 | 40 |
| 999888888 | 2 | 52 |
| 999444444 | 2 | 29 |
| 999444444 | 3 | 20 |
| 999444444 | 1 | null |
| 999444444 | 10 | 18 |
| 999444444 | 20 | 44 |
| 999887777 | 30 | 56 |
| 999887777 | 10 | 19 |
| 999222222 | 10 | 63 |
| 999222222 | 30 | 9 |
| 999555555 | 30 | 35 |
| 999555555 | 20 | 56 |
| 999666666 | 20 | null |
I understand how to calculate out of overall COUNT of all hours, but I need percentage per employee out of COUNT of hours within the same project ID, and that's what I'm struggling with. How can it be done?
CodePudding user response:
Assuming every project would have at least one record with a non zero hours value, we can try using this query:
SELECT employee_id, project_id,
100.0 * hours / SUM(hours) OVER (PARTITION BY project_id) AS percent
FROM yourTable
ORDER BY project_id, employee_id;
CodePudding user response:
You can use window functions to calculate the percentage of hours for each project:
SELECT employee_id, project_id,
100.0 * SUM(hours) OVER (PARTITION BY project_id) / SUM(hours) OVER () AS percent
FROM yourTable
ORDER BY employee_id, project_id;
