I am working on Netezza SQL.
I have the following table:
var1 var2 var3
1 a c e
2 a d f
3 a c f
4 b d e
5 b c f
6 b d f
My Problem: I am trying to perform the following types of calculations:
Level 1:
- When var1 = A, what counts and percentage of rows are: A (i.e. A/A+B * 100) and B (i.e. B/A+B * 100)
Level 2:
- When var1 = A : What counts and percentage of rows are: C (i.e. C/C+D when var1=A) and D (i.e. D/D+C when var1 =A)
- When var1 = B : What counts and percentage of rows are: C (i.e. C/C+D when var1=B) and D (i.e. D/D+C when var1 =B)
Level 3:
When var1 = A and Var2 = C: What counts and percentage of rows are : E (i.e. E/E+F when Var1 = A and Var2 = C) and F (i.e. F/E+F when Var1 = A and Var2 = C)
When var1 = A and Var2 = D: What counts and percentage of rows are : E (i.e. E/E+F when Var1 = A and Var2 = D) and F (i.e. F/E+F when Var1 = A and Var2 = D)
When var1 = B and Var2 = C: What counts and percentage of rows are : E (i.e. E/E+F when Var1 = B and Var2 = C) and F (i.e. F/E+F when Var1 = B and Var2 = C)
When var1 = B and Var2 = D: What counts and percentage of rows are : E (i.e. E/E+F when Var1 = B and Var2 = D) and F (i.e. F/E+F when Var1 = B and Var2 = D)
I know how to calculate percentages and counts relative to all rows:
select
var1,
var2,
var3,
count(*) as count,
count(*) * 100 / sum(count(*)) over () as percentage
from my_table
group by
var1,
var2,
var3;
But I do not know how to adapt the above code to solve my problem.
I know that I could do the calculations "manually" (i.e. make individual groups and calculate percentages on each group repeatedly):
SELECT var1,
COUNT(*) AS count,
COUNT(*) * 100.0 / SUM(COUNT(*)) OVER () AS percentage
FROM my_table
GROUP BY var1;
SELECT var1,
var2,
COUNT(*) AS count,
COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (PARTITION BY var1) AS percentage
FROM my_table
GROUP BY var1, var2;
SELECT var1,
var2,
var3,
COUNT(*) AS count,
COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (PARTITION BY var1, var2) AS percentage
FROM my_table
GROUP BY var1, var2, var3;
But I do not know how to do this all at once and have all results in the same table.
Can someone please show me how to do this?
Thanks!