mysql - 有没有办法对同一列求和取决于另一列?
问题描述
我有一个名为“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_id
sum 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
解决方案
我怀疑你应该使用 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) 作为“时间”做什么,
推荐阅读
- android - 如何在 Android Studio 运行时以编程方式设置构建变体?
- javascript - 如何使用 JavaScript 检测 JSP 是否加载到 PORTLET 或浏览器中?
- python - 按月份和这些月份的小时数对 pandas 数据框进行分组
- linux - 从bash中的给定日期减去月份
- database-design - 如何将富文本编辑器的状态存储在泛化到 Web 和移动应用程序的数据库中?
- laravel - Laravel 黄昏无法输入完整的输入
- android - 用安卓怎么做这样的设计,阴影怎么放?
- c - 如何从 phy_device 到 net_device?
- node.js - 用于在 Kubernetes 集群上部署的带有 Node 和 Nginx 映像的 React App 的 Dockerfile
- react-native - firebase.notifications().getInitialNotification() 在 IOS 中处于后台时不起作用