首页 > 解决方案 > 有没有办法对同一列求和取决于另一列?

问题描述

我有一个名为“menergy”的表,其中包含下一个结构和数据示例:

--------------------------------------------------------------
time | m_value | pt_periode | meter_id_meter | mtype_id_type |
--------------------------------------------------------------
t1   | 10      |  0         |      1         |      24       |
t1   |  5      |  0         |      1         |      25       |
t1   | 15      |  0         |      1         |      26       |
t1   | 20      |  0         |      1         |      27       |
t1   | 500     |  0         |      1         |      0002     |

mtype在 mType = 24, 25, 26, 27 而不是 0002 的情况下,有 4 种so 类型,并且条件: same time, same pt_periode, same meter_idsum their m_value. 例如,一个条件可能是:

  (meter_id_meter = 1 and mtype_id_type = 24 and pt_periode = 0) or
  (meter_id_meter = 1 and mtype_id_type = 25 and pt_periode = 0) or
  (meter_id_meter = 1 and mtype_id_type = 26 and pt_periode = 0) or
  (meter_id_meter = 1 and mtype_id_type = 27 and pt_periode = 0)

因此,对于最后一个数据示例,我想要的结果是:10 + 5 + 15 + 20 = 50。所以我想通过我读过的关于 IF 条件和 JOIN 的操作获得 50,但它需要创建另一个表。但是,我尝试了下一个,但出现语法错误:

SELECT
  timestampadd(month, -1, time_stamp) as "time",
  if ((meter_id_meter = 1 and mtype_id_type = 24 and pt_periode = 0) or
  (meter_id_meter = 1 and mtype_id_type = 25 and pt_periode = 0) or
  (meter_id_meter = 1 and mtype_id_type = 26 and pt_periode = 0) or
  (meter_id_meter = 1 and mtype_id_type = 27 and pt_periode = 0), SUM(m_value)) as "Q"
FROM menergy

标签: mysql

解决方案


我怀疑你应该使用 where 子句。

SELECT   SUM(m_value)) as "Q"
FROM menergy
where meter_id_meter = 1 and pr_periode = 0 and mtype_id_type in (2,25,26,27)

但我不知道你想用 timestampadd(month, -1, time_stamp) 作为“时间”做什么,


推荐阅读