模块 13 · 第 2 课(共 4)课程中的50/57~15 min
模块课程(2/4)
使用 PARTITION BY 进行分组
使用 PARTITION BY 进行分组
对每一行进行全局计算很方便,但通常还不够。我们可能想要计算每个类别或每个客户的平均值,同时保留每一行的原始详细信息。
这就是 OVER(...) 子句中的 PARTITION BY 发挥作用的地方。
PARTITION BY 的工作原理
从概念上讲,它的行为与 GROUP BY 类似,但它不是折叠结果中的行,而是仅定义函数将在其上操作以计算单行结果的数据“窗口”的边界。
SQL
SELECT
product_name,
category_id,
price,
AVG(price) OVER(PARTITION BY category_id) AS cat_avg_price
FROM products;每个产品行都保留自己的详细信息,cat_avg_price 列将显示仅限于同一类别中的产品的平均值。
锻炼#sql.m13.l2.e1
尝试:0加载中...
从“产品”表中提取“id”、“category_id”和“价格”。添加“category_total”列,使用窗口函数计算每个“category_id”的“price”总和。
正在加载编辑器...
显示提示
使用 SUM(price) OVER(PARTITION BY Category_id)。
3 次尝试后可用的解决方案
锻炼#sql.m13.l2.e2
尝试:0加载中...
从“reviews”表中,显示“product_id”、“ rating”和“avg_product_ rating”(按产品划分的平均评级)。显示所有行。
正在加载编辑器...
显示提示
使用 AVG(评级)和 PARTITION BY Product_id。如果需要,将其转换为 NUMERIC。
3 次尝试后可用的解决方案