如何计算雅典娜(普雷斯托)的总百分比?

aurhwmvo  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(310)

给定一个包含以下列的表:

Date, Type

我正在运行以下sql:

SELECT Type, count(*) as CountPerType
FROM myTable
WHERE Date between 20200101 and 20200131
GROUP BY count(*)

我想要一个额外的专栏 Percentage 这将有 100.0 * CountPerType / SUM(CountPerType) . 在prestodb(亚马逊雅典娜的动力)中最有效的方法是什么?

bq8i3lrv

bq8i3lrv1#

您可以使用窗口功能来实现这一点。您应该始终按非聚合字段进行分组。

select
    Type,
    CountPerType,
    100.0 * CountPerType/sum(CountPerType) over () as columnName
from
(
    SELECT 
        Type, 
        count(*) as CountPerType
    FROM myTable
    WHERE Date between 20200101 and 20200131
    GROUP BY 
        Type
) subq
4uqofj5v

4uqofj5v2#

我将编写没有子查询的查询。可以混合使用窗口函数和聚合函数:

SELECT Type,  COUNT(*) as CountPerType,
       COUNT(*) * 100.0 / SUM(COUNT(*)) OVER () as percentage
FROM t
WHERE Date BETWEEN 20200101 AND 20200131
GROUP BY Type;

我不知道性能是否与使用子查询的版本不同(这至少应该是一样好的)。但问题显然更简单。

相关问题