I have following table:
| %alcohol | rating | count |
|---|---|---|
| 7 | 4 | 5 |
| 6 | 5 | 3 |
| 7 | 6 | 3 |
| 4 | 7 | 2 |
| 4 | 8 | 1 |
| 4 | 9 | 5 |
with SQL commands I want to calculate the partition of the %alcohol:
| %alcohol | rating | count | percentage |
|---|---|---|---|
| 4 | 7 | 2 | 25 |
| 4 | 8 | 1 | 12.5 |
| 4 | 9 | 5 | 62.5 |
| 6 | 5 | 3 | 100 |
| 7 | 4 | 5 | 62.5 |
| 7 | 6 | 3 | 37.5 |
I already tried it with following command, but it didnt work
WITH number_of_rating AS
(
SELECT AlcoholPercentage, Rating, Count(*) AS number_of_rating_per_percentage
FROM Beer
GROUP BY Beer, Rating)
SELECT AlcoholPercentage, Rating, number_of_rating_per_percentage,
(0.0 number_of_rating_per_percentage)/(COUNT(*) OVER (PARTITION BY AlcoholPercentage)) AS Portion
FROM number_of_rating;
CodePudding user response:
Most databases support Window functions:
select *,
"Count" * 1.0 / Sum("count") over(partition by "%alcohol") * 100 as Percentage
from Beer
CodePudding user response:
WITH CTE(ALCOHOL,RATING,COUNT)AS
(
SELECT 7 , 4 , 5 UNION ALL
SELECT 6 , 5 , 3 UNION ALL
SELECT 7 , 6, 3 UNION ALL
SELECT 4 , 7, 2 UNION ALL
SELECT 4 , 8, 1 UNION ALL
SELECT 4 , 9, 5
)
SELECT C.ALCOHOL,C.RATING,C.COUNT,
CAST((CAST(C.COUNT AS DECIMAL(20,2))/CAST(SUM(C.COUNT)OVER(PARTITION BY C.ALCOHOL)AS DECIMAL(20,2)))*100.00 AS DECIMAL(20,2)) AS PER_CENTAGE
FROM CTE AS C
Enjoy your beer
