【发布时间】:2021-02-04 08:20:12
【问题描述】:
我有三个 MySQL 查询,如何将它连接到一个以更快地获得结果?是否可以使用单个查询来完成它,如果它比单独的三个查询更快? (我的表中最多可以有 150 万条记录 - 从 3 个月的时间段开始测量)
-
id- 自动递增,整数 -
phase- tinyint,只能是 1,2 或 3 -
time- 日期时间,每个阶段组 1、2、3 的时间相同 -
voltage- 浮动
样本数据:
+----+---------------------+-------+---------+
| id | time | phase | voltage |
+----+---------------------+-------+---------+
| 1 | 2021-01-31 19:55:01 | 1 | 235.77 |
| 2 | 2021-01-31 19:55:01 | 2 | 237.94 |
| 3 | 2021-01-31 19:55:01 | 3 | 224.63 |
| 4 | 2021-01-31 19:55:06 | 1 | 236.41 |
| 5 | 2021-01-31 19:55:06 | 2 | 238.17 |
| 6 | 2021-01-31 19:55:06 | 3 | 224.61 |
| 7 | 2021-01-31 19:55:11 | 1 | 236.45 |
| 8 | 2021-01-31 19:55:11 | 2 | 237.87 |
| 9 | 2021-01-31 19:55:11 | 3 | 223.4 |
+----+---------------------+-------+---------+
查询 #1:
SELECT time, voltage AS L1
FROM measurements
WHERE phase = 1
ORDER BY id
查询 #2:
SELECT time, voltage AS L2
FROM measurements
WHERE phase = 2
ORDER BY id
查询 #3:
SELECT time, voltage AS L3
FROM measurements
WHERE phase = 3
ORDER BY id
之后的结果应该是这样的:
+----+---------------------+--------+--------+--------+
| id | time | L1 | L2 | L3 |
+----+---------------------+--------+--------+--------+
| 1 | 2021-01-31 19:55:01 | 235.77 | 237.94 | 224.63 |
| 2 | 2021-01-31 19:55:06 | 236.41 | 238.17 | 224.61 |
| 3 | 2021-01-31 19:55:11 | 236.45 | 237.87 | 223.4 |
+----+---------------------+--------+--------+--------+
编辑:毕竟,我得到了一个查询:
SELECT
time,
GROUP_CONCAT(IF(phase = 1, voltage, NULL)) AS 'L1',
GROUP_CONCAT(IF(phase = 2, voltage, NULL)) AS 'L2',
GROUP_CONCAT(IF(phase = 3, voltage, NULL)) AS 'L3'
FROM
`measurements`
GROUP BY
time
现在结果如下:
+---------------------+--------------------+--------------------+--------------------+
| time | L1 | L2 | L3 |
+---------------------+--------------------+--------------------+--------------------+
| 2021-01-31 19:55:01 | 235.77000427246094 | 237.94000244140625 | 224.6300048828125 |
| 2021-01-31 19:55:06 | 236.41000366210938 | 238.1699981689453 | 224.61000061035156 |
| 2021-01-31 19:55:11 | 236.4499969482422 | 237.8699951171875 | 223.39999389648438 |
+---------------------+--------------------+--------------------+--------------------+
为什么现在电压值如此不准确,所有电压存储的值在小数点后最多为 2 个数字我没有在查询中做任何数学运算……那为什么会得到这个奇怪的值?
【问题讨论】:
-
您可能希望在查询中使用不同的阶段条件。
-
@XnIcRaM WHERE 条件是否正确?根据直觉,我认为您希望 Q2 检查 phase=2 和 Q3 检查 phase=3?
-
按时间戳分组。使用 case 表达式来选择不同的 L1、L2 和 L3 值。
-
这个问题听上去像是被提问和回答的pivot
标签: mysql sql pivot-table