SQL使用表自联接计算百分比

时间:2014-11-14 20:13:45

标签: sql sql-server database join self-join

所以我有这张桌子:

SQL table

列表示房屋类型,数量和RegionName。我需要构建一个查询,它返回每个区域中某个房屋类型的百分比,如下所示:

nomRegion    tipo                   Prct
Central      Casa independiente     23.5
brunca       Casa independiente     54.7
chorotega    Casa independiente     12.4
....         Casa independiente     ....

我需要自己加入桌子,以获得每个地区所需类型的房屋数量,然后除以每个地区的房屋总数。我尝试编写此查询,但它在所有百分比字段中返回0。

select T.nomRegion, T.Tipo, (T.Cantidad/SUM(V.Cantidad))*100
from dbo.TipoVivienda T join dbo.TipoVivienda V on T.nomRegion = V.nomRegion
where T.Tipo = 'Casa independiente'
group by T.nomRegion, T.Tipo, T.Cantidad

我尝试过其他变体,基于这个问题:SQL issue: Calculating percentages and using multiple joins to the same table

select T.nomRegion, T.Tipo, 100 * (T.Cantidad/V.Cantidad)
from dbo.TipoVivienda T inner join (select nomRegion as nomRegion, SUM(Cantidad) as Cantidad
                                    from dbo.TipoVivienda
                                    group by nomRegion) V on T.nomRegion = V.nomRegion
where T.Tipo = 'Casa independiente'
group by T.NomRegion, T.Tipo, T.Cantidad, V.Cantidad

但是查询仍然以所有区域的百分比形式返回0。不知道我在这里做错了什么...... 我使用相关查询尝试了另一种查询变体,但结果是相同的:

select T.nomRegion, T.Tipo, (T.Cantidad / (select SUM(V.cantidad)
                                           from dbo.TipoVivienda V
                                           where V.nomRegion = T.nomRegion
                                           group by V.nomRegion))*100
from dbo.TipoVivienda T
where T.tipo = 'Casa independiente'

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

与1.0一起得到正确的结果,因为sql server执行整数运算。

(T.Cantidad*1.0/SUM(V.Cantidad))*100 

或首先乘以100然后再进行除法。

T.Cantidad*100.0/SUM(V.Cantidad)