数据:
我有以下MySQL表:
Timestamp | MachineID | Arrival_Timestamp | CobID | Data |
--------------------+-----------+---------------------+-------+------|
2017-07-22 20:03:07 | 1217 | 2017-08-08 04:46:02 | C237 | 10 |
2017-07-22 20:03:08 | 1217 | 2017-08-08 04:47:03 | C237 | 11 |
2017-07-22 20:03:09 | 1217 | 2017-08-08 04:48:04 | C237 | 12 |
2017-07-22 20:07:17 | 1218 | 2017-08-08 04:49:05 | C234 | 20 |
2017-07-22 20:05:19 | 1224 | 2017-08-08 04:50:06 | C239 | 30 |
2017-07-22 20:06:17 | 1216 | 2017-08-08 04:50:07 | C237 | 40 |
2017-07-22 20:08:07 | 1224 | 2017-08-08 04:50:08 | C234 | 50 |
2017-07-22 20:09:14 | 1216 | 2017-08-08 04:55:09 | C239 | 60 |
2017-07-22 20:09:14 | 1216 | 2017-08-08 04:55:10 | C239 | 61 |
2017-07-22 20:09:17 | 1216 | 2017-08-08 04:55:12 | C239 | 63 |
2017-07-22 20:09:18 | 1216 | 2017-08-08 04:56:02 | C239 | 63 |
2017-07-22 20:09:19 | 1216 | 2017-08-08 04:56:03 | C239 | 63 |
2017-07-22 20:09:34 | 1217 | 2017-08-08 04:56:21 | C234 | 70 |
2017-07-22 20:09:56 | 1224 | 2017-08-08 04:57:23 | C237 | 80 |
2017-07-22 20:09:58 | 1299 | 2017-08-08 04:57:43 | C239 | 90 |
2017-07-22 20:09:59 | 1218 | 2017-08-08 04:57:55 | C239 | 100 |
2017-07-22 20:10:04 | 1218 | 2017-08-08 04:58:03 | C234 | 110 |
2017-07-22 20:10:17 | 1217 | 2017-08-08 04:58:04 | C239 | 120 |
在此表中,我想计算所有唯一CobID
的所有唯一MachineID
的所有条目/行。
目标:
我想写一个查询,输出将是:
| 1216 | 1217 | 1218 | 1224 | 1299 |
-----+------+------+------+------+------|
C234 | 0 | 1 | 1 | 2 | 0 |
C237 | 1 | 3 | 0 | 1 | 0 |
C239 | 5 | 1 | 1 | 1 | 1 |
因此,此查询,我可以查看MachineID
1216
并说明0
有C234
个条目,5
条目C239
}}
到目前为止我做了什么:
我尝试了以下查询,它可以获得我想要的内容,但不是我想要的确切格式:
data_query = "SELECT `MachineID`, `CobID`, COUNT(*) FROM `my_table` WHERE `Arrival_Timestamp` between \'{}\' AND \'{}\' GROUP BY `CobID`, `MachineID` ORDER BY `CobID` ASC".format(
start_date, end_date)
问题:
如何更改查询以使其达到上述格式?
答案 0 :(得分:0)
尝试使用仅包含SUM 1的CASE,如果它是correc列,如果您有更多的机器类型,则可以添加更多列:
data_query="SELECT CobID,
SUM(case
when MachineID='1216' then 1
else 0
end) as '1216',
SUM(case
when MachineID='1217' then 1
else 0
end) as '1217',
SUM(case
when MachineID='1218' then 1
else 0
end) as '1218',
SUM(case
when MachineID='1224' then 1
else 0
end) as '1224',
SUM(case
when MachineID='1299' then 1
else 0
end) as '1299'
FROM my_table
WHERE `Arrival_Timestamp` between \'{}\' AND \'{}\'
group by CobID
ORDER BY `CobID` ASC".format(start_date, end_date)