【发布时间】:2020-03-17 23:16:30
【问题描述】:
如果不使用 CTE 或子查询,有没有办法使用与 GROUP BY 不同的汇总级别的 Window 功能? COUNT(*) 有效,但如果在 COUNT 中指定了列名或使用了 SUM 函数,则查询错误并显示“不是有效的 group by expression”。即使 PARTITION BY 列与 GROUP BY 相同,也会出现错误结果。
注释掉的行将导致查询失败。 正是针对这些类型的事物,人们首先想要使用 Window 功能。
create table sales (product_id integer, retail_price real, quantity integer, city varchar, state varchar);
insert into sales (product_id, retail_price, quantity, city, state) values
(1, 2.00, 1, 'SF', 'CA'),
(1, 2.00, 2, 'SJ', 'CA'),
(2, 5.00, 4, 'SF', 'CA'),
(2, 5.00, 8, 'SJ', 'CA'),
(2, 5.00, 16, 'Miami', 'FL'),
(2, 5.00, 32, 'Orlando', 'FL'),
(2, 5.00, 64, 'SJ', 'PR');
select city, state
, count(*) as city_sale_cnt
, count(*) over ( partition by state) as state_sale_cnt
-- , count(product_id) over ( partition by state) as state_sale_cnt2
, sum(retail_price) as city_price
-- , sum(retail_price) over ( partition by state) as state_price
from sales
group by 1,2;
docs 表示 Window 功能可能会导致问题,包括含糊的警告“PARTITION BY 并不总是与 GROUP BY 兼容。”: 错误消息 SQL 编译错误:... is not a valid group by expression 通常表明 SELECT 语句的“项目”子句中的不同列的分区方式不同,因此可能会产生不同数量的行。
【问题讨论】:
标签: sql count sum snowflake-cloud-data-platform window-functions