我有一个带有3列的表:name,a,b。
"名称"中的名称多次重复。
我希望,对于每个名称中的每个名称,请返回" a"中的值之和,而" b"中的值之和。
例如:
Name A B
---------------
'fds' 5 4
'fds' 3 6
'keo' 3 4
我想获得此表:
Name Percentage
-------------------
'fds' 0.8
'kep' 0.75
您需要使用group by
:
select Name, cast(sum(A) as float)/cast(sum(B) as float) Percentage
from TableName
group by Name
A
和B
的数据类型是什么?在大多数数据库中,在大多数情况下,这将起作用:
select name, sum(A) / sum(B) as ratio
from t
group by name;
写这篇文章以防止 0
的划分:
select name, sum(A) / nullif(sum(B), 0) as ratio
from t
group by name;
如果列都是整数(任何形式),则某些数据库确实会进行整数划分。在这种情况下,我经常乘以1.0:
select name, sum(A) * 1.0 / nullif(sum(B), 0) as ratio
from t
group by name;
请注意,我将列重命名为ratio
。传统上,percentages
从0到100,而不是从0到1。