SQL中结合CASE WHEN与WHERE计算2016年欧元销售额语法错误如何解决?
SQL代码修正方案
原代码存在的错误
- CASE表达式用法错误:SELECT查询中不能用
SET对原表字段赋值,CASE的作用是返回计算后的新值,而非修改原表数据 - 字符串常量缺引号:
lower(currency) = pound中的pound是字符串值,必须加单引号写成'pound' - 计算逻辑顺序错误:需要先把不同币种的单价统一换算为欧元,再乘以数量求和,不能先求和再处理汇率
- CASE分支覆盖不全:缺少欧元币种的返回规则,未匹配的分支会返回NULL,导致求和结果异常
修正后代码
如果你需要把2016年所有订单都换算成欧元统计总额(按你写的1英镑兑换1.1欧元的汇率),用以下代码:
SELECT SUM(quantity * CASE WHEN LOWER(currency) = 'pound' THEN price * 1.1 WHEN LOWER(currency) = 'euro' THEN price ELSE 0 -- 其他币种可根据实际需求调整处理规则 END ) AS total_sales_euro_2016 FROM order_items WHERE YEAR(order_date) = 2016;
如果你的需求是仅统计2016年本身就以欧元计价的订单总额,可以简化为:
SELECT SUM(quantity * price) AS total_sales_euro_2016 FROM order_items WHERE YEAR(order_date) = 2016 AND LOWER(currency) = 'euro';
用你提供的样例数据计算,仅统计欧元币种的2016年订单总额为17.5欧元。
内容的提问来源于stack exchange,提问作者Jora_tontak
相关产品推荐
相关产品推荐

