在BigQuery中,窗口标识(Window Functions)是一种用于对查询结果集进行分组、排序和聚合的技术。它可以在查询中使用窗口函数来计算每个行的聚合值,同时保留原始行的详细信息。下面是一个使用窗口标识的代码示例:
CREATE TABLE sales (
order_id INT64,
order_date DATE,
customer_id INT64,
product_id INT64,
quantity INT64,
price FLOAT64
);
INSERT INTO sales VALUES
(1, '2021-01-01', 1, 1, 10, 100.0),
(2, '2021-01-02', 1, 2, 5, 50.0),
(3, '2021-01-03', 2, 1, 8, 80.0),
(4, '2021-01-04', 2, 2, 12, 120.0),
(5, '2021-01-05', 3, 1, 15, 150.0),
(6, '2021-01-06', 3, 2, 20, 200.0);
PARTITION BY
子句按客户ID分组,并使用SUM
聚合函数计算每个组的订单总金额:SELECT
customer_id,
order_id,
order_date,
SUM(price * quantity) OVER (PARTITION BY customer_id) AS total_amount
FROM
sales;
这将返回以下结果:
customer_id | order_id | order_date | total_amount
------------+----------+-------------+--------------
1 | 1 | 2021-01-01 | 600.0
1 | 2 | 2021-01-02 | 600.0
2 | 3 | 2021-01-03 | 1600.0
2 | 4 | 2021-01-04 | 1600.0
3 | 5 | 2021-01-05 | 3500.0
3 | 6 | 2021-01-06 | 3500.0
在上面的查询中,SUM(price * quantity) OVER (PARTITION BY customer_id)
是一个窗口函数,它计算每个客户的订单总金额。PARTITION BY customer_id
将查询结果按客户ID分组,然后使用SUM(price * quantity)
计算每个组的订单总金额。
请注意,窗口函数不会改变查询结果的行数,而是为每个行添加一个新的计算列。在这个例子中,我们计算了每个订单的总金额,并将结果添加到每个订单的行上。
这只是一个窗口标识的简单示例,BigQuery窗口标识功能非常强大,并且支持许多其他功能,如排序、排名、行号等。您可以根据具体的需求使用适当的窗口函数和子句来编写更复杂的查询。