我有一个包含以下列的表...
TestName - StepNumber - Data_1
我正在尝试编写一个可以查找Data_1结果并将其平均一天的查询。 TestNames是我们正在运行的独特测试,StepNumbers是测试中的各个步骤。通常,我会使用像
这样的东西select Data_1 from table
where TestName in(1,2,3,4)
and StepNumber in(1)
返回我需要的所有Data_1结果。但是,有时我需要的数据位于表格的不同步骤中。测试1可能具有步骤2中的所需数据,步骤10中的测试2等等...最后,我需要所有类似StepNumber结果的Data_1结果的平均值。我不确定如何在单个查询中捕获这些数据。查询中有一个单独的部分,我按地理位置划分它,单独完成它需要很长时间。
我会寻找类似......
的东西select avg(Data_1) from table
where TestName = 1 and StepNumber = 2
and TestName = 2 and StepNumber = 10
and TestName = 3 and StepNumber = 5
如果我能澄清一下,请告诉我。谢谢!
答案 0 :(得分:1)
select avg(Data_1)
from table
where (TestName = 1 and StepNumber = 2)
or (TestName = 2 and StepNumber = 10)
or (TestName = 3 and StepNumber = 5)
答案 1 :(得分:0)
如果我理解正确,您的表格中有三个(或更多)数据集:
如果您希望所有三个的平均值,则需要选择三列。 AVG
在这种情况下无法帮助你,因为它会在N4的基数上运行平均值,这是三组的交集。所以你必须手工完成。我不知道这将如何执行与三个单独的查询:
SELECT
AVG(Data_1) AS OverallAverage,
SUM(IF((TestName = 1 AND StepNumber = 2), Data_1, 0))
/SUM(IF((TestName = 1 AND StepNumber = 2), 1, 0)) AS AvgGroup1,
SUM(IF((TestName = 2 AND StepNumber = 10), Data_1, 0))
/SUM(IF((TestName = 2 AND StepNumber = 10), 1, 0)) AS AvgGroup2,
SUM(IF((TestName = 3 AND StepNumber = 5), Data_1, 0))
/SUM(IF((TestName = 3 AND StepNumber = 5), 1, 0)) AS AvgGroup3
FROM table
WHERE (
( TestName = 1 AND StepNumber = 2)
OR
( TestName = 2 AND StepNumber = 10)
OR
( TestName = 3 AND StepNumber = 5)
);
这种查询可以从组件中组合,即根据组的编程方式。
This是一个显示结果的SQLFiddle。