按年核算促销效果效率SQL查询出现promotion_value未知字段报错求解
问题原因
SQL执行逻辑中,SELECT子句内定义的别名无法在同一级SELECT的其他计算字段中直接引用,数据库引擎会先处理字段计算逻辑,再识别别名定义,你直接用promotion_value、sales两个别名计算消耗率时,系统尚未完成这两个别名的映射,因此会抛出字段不存在的错误。
正确查询语句
方案1:直接复用聚合函数(写法简洁,无需额外嵌套)
SELECT LEFT(order_date,4) AS years, SUM(sales) AS sales, SUM(discount_value) AS promotion_value, ROUND((SUM(discount_value)/SUM(sales))*100,2) AS burn_rate_percentage FROM dqlab_sales_store WHERE order_status = 'Order Finished' GROUP BY 1 ORDER BY 1;
方案2:通过派生表实现需求(符合你创建派生表的初始要求)
SELECT years, sales, promotion_value, ROUND((promotion_value/sales)*100,2) AS burn_rate_percentage FROM ( -- 内层派生表完成年度总销售额、总折扣金额的预计算 SELECT LEFT(order_date,4) AS years, SUM(sales) AS sales, SUM(discount_value) AS promotion_value FROM dqlab_sales_store WHERE order_status = 'Order Finished' GROUP BY 1 ) AS yearly_sales_stats ORDER BY years;
内容的提问来源于stack exchange,提问作者Arief Nugroho
相关产品推荐
相关产品推荐

