簡體   English   中英

SQL-使用兩個不同的“ where”語句從同一表中提取數據

[英]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)

如果我正確理解,則表中有三組 (或更多組)數據:

  1. TestName = 1和StepNumber = 2-基數N1
  2. 測試名稱= 2並且步驟編號= 10-基數N2
  3. TestName = 3,StepNumber = 5-基數N3

如果要分別為所有三個平均值,則需要選擇三列。 在這種情況下, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM