Postgres:计算同数总数和百分比

问题描述 投票:0回答:1

我正在尝试计算日期范围内每个深度的风险总和和百分比,总和是正确的,但百分比全为零,我的查询出了什么问题?

SELECT
    e.entity_uuid AS "entityUuid",
    SUM(e.count) as "total",
    (e.count/SUM(e.count) OVER ()) AS "percentage"
    FROM address_entity e   
    WHERE e.depth = 1
        AND e.monitoring_report_id IN (
            SELECT m.id FROM monitoring_report m
                WHERE m.report_date BETWEEN '2020-03-01' AND '2020-03-29')
        AND e.entity_uuid IN ('393996d1-8df4-414f-8534-bd96f49ce16d','b6497c14-4264-4054-abd3-cb8594fb5072','c2fd62b3-47b3-4fd9-a4ff-a9cf847cd134','e9fa9758-e856-4ce1-9a3a-d0d4b0c35977','5dd4b3b6-cebd-4ce6-93fd-6e59ba8420e7','10d31034-2725-4ac5-937e-4b84e90e3be9')
        AND e.category IN ( SELECT category_uuid FROM wiki_entity WHERE risky = 1)
    GROUP BY e.entity_uuid, e.count
    ORDER BY e.entity_uuid

结果:

enter image description here

postgresql postgresql-9.5
1个回答
0
投票

猜测e.countinteger值:您正在计算integer除法:

SELECT 1/2               -- == 0

但是您可以将其转换为decimal类型:

SELECT 1/2::decimal      -- == 0.5

就您而言,是指:

SELECT
    ...
    (e.count/SUM(e.count)::decimal OVER ()) AS "percentage"
    ...
© www.soinside.com 2019 - 2024. All rights reserved.