从每个表中选择平均值

Posted

技术标签:

【中文标题】从每个表中选择平均值【英文标题】:Select avg from each table 【发布时间】:2015-01-13 16:33:54 【问题描述】:

我想查询多个表并从每个表中获得store_key 的平均计数,对每个表使用一组相当精细的WHERE 标准。我可以单独查询它们,但我想在一个查询中完成。

每个表都有retailer_keystore_key(以及许多其他列)

我希望我的查询返回如下内容:

表名 |商店钥匙的平均数

使用类似于WHERE retailer_key = 41 AND 的 where 条件...使用每个表共享的列。

这有意义吗?看起来很简单,但由于某种原因,我无法弄清楚如何构建查询。

【问题讨论】:

哪种风格的 SQL ? (即mysql或oracle等) 听起来好像对我来说没有标准化。 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

【讨论】:

您必须从每个表中选择 retailer_key 才能在派生表的 where 条件中使用它。此外,最好将 where 条件和 avg 放在派生表中,以便数据库可以使用索引 @FuzzyTree 关于retailer_key 的好点 - 已编辑。 avg 不能在内部查询中完成而不复制 where 子句,这正是 OP 试图避免的。

以上是关于从每个表中选择平均值的主要内容,如果未能解决你的问题,请参考以下文章

从具有不同条件的表中选择总和和平均值

无法从 SQLPLUS 中的 select 语句创建的表中选择数据

如何循环表中的每个值并找到平均值

如何从此表中选择并添加平均值然后排序[重复]

如何使用表中的“时间戳”列选择一个小时内“值”列的平均值

在 SQL 中选择日期之间的平均差异