如何通过分组计算值的百分比

时间:2019-09-01 09:57:56

标签: mysql sql group-by

我有桌子:

Country:
id | name     | group| type
1  | USA      | 1    | 0
2  | Germany  | 2    | 1
3  | France   | 2    | 0
4  | China    | 1    | 1
5  | Japan    | 3    | 0
6  | Italy    | 1    | 1
7  | Mexico   | 1    | 0
8  | Columbia | 3    | 0
9  | Taiwan   | 2    | 1
...

现在,我希望接收“类型”字段为正的百分比,并按“组”字段进行分组。

因此结果应类似于:

group| percentage
1    | 50%        -- 0 + 1 + 1 + 0 = 2/4 = 50%
2    | 66%        -- 1 + 0 + 1 = 2/3 = 66%
3    | 0%         -- 0 + 0 = 0/2 = 0%

最佳方法是什么?一个查询有可能吗?我是MySQL的新手,我不知道。我只能:

SELECT group, (????) as percentage FROM country GROUP BY group;

2 个答案:

答案 0 :(得分:1)

您想要AVG

SELECT group, round(avg(type*100.0), 0) as percentage 
FROM country 
GROUP BY group

Fiddle

答案 1 :(得分:0)

如果列类型仅具有值0和1:

SELECT 
  `group`, 
  round(100.0 * sum(type) / count(*), 0) as percentage 
FROM country 
GROUP BY `group`;

请参见demo
结果:

| group | percentage |
| ----- | ---------- |
| 1     | 50         |
| 2     | 67         |
| 3     | 0          |