![](/img/trans.png)
[英]Combining two SQL statements with same stem but different where clause
[英]SQL - Pulling data from the same table with two different “where” statements
我有一個包含以下各列的表格...
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中具有所需的數據,測試2在步驟10中具有依此類推,等等……最后,我需要所有類似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
如果可以澄清,請告訴我。 謝謝!
select avg(Data_1)
from table
where (TestName = 1 and StepNumber = 2)
or (TestName = 2 and StepNumber = 10)
or (TestName = 3 and StepNumber = 5)
如果我正確理解,則表中有三組 (或更多組)數據:
如果要分別為所有三個平均值,則需要選擇三列。 在這種情況下, 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)
);
可以從組件中組裝這種查詢,即根據組以編程方式進行組裝。
這是一個顯示結果的SQLFiddle。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.