2015-01-13 2 views
1

Я хотел бы запросить несколько таблиц и получить среднее число store_key от каждого, используя довольно сложный набор критериев: WHERE. Я могу запросить их все отдельно, но я хотел бы сделать это в одном запросе.Выберите avg из каждой таблицы

Каждая таблица имеет retailer_key, store_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 производной таблицы. Кроме того, вероятно, лучше указать условия и 'avg' в производной таблице, чтобы db мог использовать индексы – FuzzyTree

+0

@FuzzyTree хорошая точка в' retailer_key' - отредактирована. 'Avg' не может быть сделано во внутренних запросах, не дублируя предложение' where', хотя именно это и пыталось избежать OP. – Mureinik

Смежные вопросы