MySQL中如何映射表字段并计算时间与零售价的乘积?
MySQL单语句实现表关联映射与乘积计算
我有两个MySQL表:
- table1包含
meterName和retailPrice字段,数据如下:
+----------------+-------------------+ | meterName | retailPrice | +----------------+-------------------+ | ND40rs v2 Spot | 8.5851642 | | ND80rs v2 Spot | 4.5851642 | +------------------------------------+
- table2包含
mapMeterName和time字段,数据如下:
+----------------+-------------------+ | mapMeterName | time | +----------------+-------------------+ | nd40_spot | 1.2 | | nd80_spot | 2.5 | +------------------------------------+
其中meterName的ND40rs v2 Spot与mapMeterName的nd40_spot对应,ND80rs v2 Spot与nd80_spot对应。需要将两表关联,计算time与retailPrice的乘积,得到如下格式的结果:
+----------------+-------------------+----------------------------+ | meterName | retailPrice | (time x retailPrice)= cost | +----------------+-------------------+----------------------------+ | ND40rs v2 Spot | 8.5851642 | 10.302197 | | ND80rs v2 Spot | 4.5851642 | 11.4629105 | +------------------------------------+----------------------------+
是否可以用一行MySQL语句实现该映射与计算?
可以用一行MySQL语句完成需求,通过CASE表达式明确映射关联关系,同时完成乘积计算:
SELECT t1.meterName, t1.retailPrice, ROUND(t1.retailPrice * t2.time, 7) AS `(time x retailPrice)= cost` FROM table1 t1 JOIN table2 t2 ON CASE WHEN t1.meterName = 'ND40rs v2 Spot' THEN t2.mapMeterName = 'nd40_spot' WHEN t1.meterName = 'ND80rs v2 Spot' THEN t2.mapMeterName = 'nd80_spot' END;
补充说明:
- 语句中用
JOIN关联两表,CASE表达式直接指定了两组映射的匹配规则 ROUND()函数用于控制乘积结果的小数位数,与示例输出精度一致- 用反引号
`包裹别名,避免特殊字符引发语法错误
如果后续映射关系增多,也可以通过字符串提取函数(如SUBSTRING_INDEX)简化关联条件,但针对当前给定的两组映射,上述语句最直接易读。
内容的提问来源于stack exchange,提问作者abinitio
相关产品推荐
相关产品推荐

