2015-01-13 73 views
1

我想查詢多個表並從每個表中獲得平均數爲store_key,每個表使用相當複雜的一組WHERE條件。我可以單獨查詢它們,但我想在一個查詢中執行此操作。從每個表中選擇平均值

每個表都有retailer_keystore_key(以及許多其他列)

,我想我的查詢返回的東西,看起來像:

表名稱| AVG存儲鍵的數量

使用與WHERE retailer_key = 41 AND類似的條件...使用每個這些表共享的列。

這是否有意義?這看起來很簡單,但由於某種原因,我無法弄清楚如何構建查詢。

+1

其SQL的味道? (即MySQL或oracle等) – Coffee

+2

聽起來像它沒有正常化我。 – duffymo

+0

PLSQL;到目前爲止,我唯一的工作方式是編寫單獨的查詢,並用分號分隔它們,然後進入excel表格,我發現它很荒謬。 –

回答

1

你可以使用一系列工會的所有運營商:

SELECT table_name, AVG(store_key) 
FROM  (SELECT 'table1' AS table_name, store_key, retailer_key 
      FROM table1 
      UNION ALL 
      SELECT 'table2' AS table_name, store_key, retailer_key 
      FROM table2 
      UNION ALL 
      SELECT 'table3' AS table_name, store_key, retailer_key 
      FROM table3 
      -- More queries like this if needed... 
     ) t 
WHERE retailer_key = 41 -- AND additional conditions 
GROUP BY table_name 
+0

您必須從每個表中選擇'retailer_key'才能在派生表的where條件中使用它。此外,將where條件和'avg'放在派生表中可能會更好,因此db可以使用索引 – FuzzyTree

+0

@FuzzyTree關於'retailer_key'編輯的好處。 'avg'不能在內部查詢中完成,不需要重複where子句,這正是OP試圖避免的。 – Mureinik