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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:05:23