SQL window 函数分组了,但还是得到 "must be an aggregate expression or appear in GROUP BY clause"

SQL window function is grouped, but still get "must be an aggregate expression or appear in GROUP BY clause"

我有一个 SQL (presto) 查询,假设是这样的:

select
      id
    , product_name
    , product_type
    , sum(sales) as total_sales
    , sum(sales) over (partition by type) as sales_by_type

from some_table

group by 1,2,3

当我 运行 执行此操作时,我收到一条错误消息,告诉我 window 函数需要出现在 GROUP BY 子句中。是用子查询解决这个问题的最佳解决方案吗?或者我需要做一些语法更改才能使它起作用吗?

你需要的是下面这样的东西

select
      id
    , product_name
    , product_type
    , sum(sales) over () as total_sales
    , sum(sales) over (partition by type) as sales_by_type
    from some_table

select
      id
    , product_name
    , product_type
    , sum(sales) over (partition by (select 1)) as total_sales
    , sum(sales) over (partition by type) as sales_by_type
    from some_table

这两个都在 sql 服务器上工作。不确定 what/if 它是否适用于 presto。

我也看到了下面的变化。

over (partition by null)

如果您想要该类型的总销售额,那么您需要嵌套 sum()s:

select id, product_name, product_type,
       sum(sales) as total_sales,
       sum(sum(sales)) over (partition by type) as sales_by_type
from some_table
group by 1,2,3;

如果您还想要所有销售额的总和,则:

select id, product_name, product_type,
       sum(sales) as total_sales,
       sum(sum(sales)) over (partition by type) as sales_by_type,
       sum(sum(sales)) over () as total_total_sales
from some_table
group by 1,2,3;