I seek your help in generating a summary query result as %, n (numerator), and N (Denominator) out of a variable in the dataset for each underlying category:
e.g: data
| sr.no. | is_healthy |
|---|---|
| 1 | yes |
| 2 | no |
| 3 | yes |
| 4 | no |
| 5 | yes |
| 6 | yes |
| 7 | no |
| 8 | yes |
| 9 | no |
| 10 | yes |
I expect the following as a summary result
| is_healthy | % | n | N |
|---|---|---|---|
| yes | 60 | 6 | 10 |
| no | 40 | 4 | 10 |
What could be a possible SQL query to solve this challenge? Thanks in adavance.
Advertisement
Answer
N is the total count of rows in the table.
n is the count of rows matching a value.
% is just n/N*100.
You can get n by using count(*) in a grouped query and N by using count(*) in an ungrouped query. Since you know N will be a single row, you can cross-join on it:
SELECT is_healthy, cnt, total, cnt / total * 100 AS percent
FROM (SELECT is_healthy, COUNT(*) AS cnt
FROM my_table
GROUP BY is_healthy) grouped
CROSS JOIN (SELECT COUNT(*) AS total
FROM mytable) ungrouped