You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决SQL错误:Column 'product_aggregation.product_key'选择列表无效

错误原因与修复方案

错误根源

你遇到的Msg 8120错误,是因为最终查询中使用了聚合函数SUM(),但product_key等列既没有被包含在GROUP BY子句中,也没有被包裹在聚合函数里。

注意看你计算avg_selling_price的代码:

ROUND(SUM(CAST(total_sales AS FLOAT)) / NULLIF(SUM(total_quantity), 0), 1) AS avg_selling_price

而product_aggregation CTE已经是按product_key等字段分组后的结果——每个产品对应唯一一行数据,total_sales和total_quantity都是该产品的汇总值,不需要再用SUM()做二次聚合。

修复后的完整代码

Create View gold.report_products As
WITH Base_query AS (
SELECT 
P.product_key, 
P.product_name, 
P.category, 
P.subcategory, 
P.cost,
S.order_date,
S.customer_key,
S.order_number,
S.sales_amount,  
S.quantity
FROM gold.fact_sales S 
LEFT JOIN gold.dim_products P ON S.product_key = P.product_key
WHERE order_date IS NOT NULL
),
product_aggregation AS (
SELECT 
product_key,
product_name,
category,
subcategory,
cost,
DATEDIFF(MONTH, MIN(order_date), MAX(order_date)) AS Lifespan, 
MAX(order_date) AS last_orderdate,
COUNT(DISTINCT order_number) AS total_orders,
COUNT(DISTINCT customer_key) AS total_customers,
SUM(sales_amount) AS total_sales,
SUM(quantity) AS total_quantity
FROM Base_query
GROUP BY 
product_key, 
product_name,
category,
subcategory,
cost
)

--Final Query: combines all product results into one output
SELECT 
product_key,   --line 42
product_name,
category,
subcategory,
cost,

CASE 
WHEN total_sales >= 2430 AND total_sales <= 459438 THEN 'Low Performance'
WHEN total_sales > 459438 AND total_sales <= 916446 THEN 'Mid_Range'
WHEN total_sales > 916446 AND total_sales <= 1373454 THEN 'High Performance'
END AS Revenue_product_segmentation,

total_sales,
total_quantity,
total_orders,
total_customers,
Lifespan,

-- 修正后的avg_selling_price计算:无需SUM,直接用单条记录的汇总值
ROUND(CAST(total_sales AS FLOAT) / NULLIF(total_quantity, 0), 1) AS avg_selling_price,

-- Recency calculation
DATEDIFF(MONTH, last_orderdate, GETDATE()) AS recency_in_month,

-- Avg_order_revenue calculation
CAST(total_sales AS FLOAT) / NULLIF(total_orders, 0) AS Avg_order_revenue,

-- Avg_monthly_revenue calculation
CASE 
WHEN Lifespan=0 THEN total_sales 
ELSE CAST(total_sales AS FLOAT) / Lifespan 
END AS Avg_monthly_revenue

FROM product_aggregation;

关键修正点

  • 移除了avg_selling_price计算中的SUM()函数,直接使用product_aggregation中已有的total_sales和total_quantity字段进行计算。因为每个产品在product_aggregation中只有一行数据,二次聚合毫无意义,反而会触发分组规则错误。

内容的提问来源于stack exchange,提问作者Ella Ya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:45:09