我有两个表,我想根据其中一列中的值加入和拆分 case 函数。(我知道,听起来很奇怪,所以让我解释一下)
这是一个我运行不同批次的过程。每一批都有几个样本,这些样本是在几个位置的电压读数实例中测量的。我的两张表是这样的:
Sample Readings
id id
BatchesID SampleID
... voltage
... location
当一个批次运行时,它一次采集一个样本,并且对于每个位置(25 个位置),在移动到下一个之前需要读取大约 20 个电压读数。
我想一次看一批,对于每个 Sample.id,我想收集所有位置的 AVG(电压)。我的读数表结果如下:
SampleID location voltage
1 1 5.23
1 1 4.53
... ... ...
1 25 7.89
2 1 4.96
2 1 5.04
... ... ...
2 25 6.09
...
但我希望它看起来像:
SampleID avg_v_for_1 avg_v_for_2 ... avg_v_for_25
1 4.73 5.24 ... 6.35
2 3.87 4.76 ... 9.32
... ... ... ... ...
200 6.73 3.87 ... 8.23
基本上,我想做的是对于每个单独的样本,我想为每个位置的所有测量值取平均电压,然后放在一行中。我当前的语法是这样的:
SELECT Readings.SampleID, Sample.BatchesID
(case when location = '1' then AVG(voltage) else 0 end) avg_v_for_1,
(case when location = '2' then AVG(voltage) else 0 end) avg_v_for_2,
...
(case when location = '25' then AVG(voltage) else 0 end) avg_v_for_25
FROM DB.Readings
INNER JOIN Sample
ON Readings.SampleID = Sample.id
WHERE Sample.BatchesID = 'specific_batch_id'
GROUP BY Readings.location, Sample.id;
问题是这会生成下表:
SampleID avg_v_for_1 avg_v_for_2 ... avg_v_for_25
1 4.73 0 ... 0
1 0 4.76 ... 0
1 0 0 ... 6.73
2 3.87 0 ... 0
2 0 4.83 ... 0
...
如何让 MySQL 收集单行上每个位置的所有平均值?我尝试按位置删除组,仅按 sampleID 分组,但我只获得第一个位置的值,其他所有值都变为 0。
任何帮助表示赞赏,谢谢!