从每个表中选择平均值
Posted
技术标签:
【中文标题】从每个表中选择平均值【英文标题】:Select avg from each table 【发布时间】:2015-01-13 16:33:54 【问题描述】:我想查询多个表并从每个表中获得store_key
的平均计数,对每个表使用一组相当精细的WHERE
标准。我可以单独查询它们,但我想在一个查询中完成。
每个表都有retailer_key
、store_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 试图避免的。以上是关于从每个表中选择平均值的主要内容,如果未能解决你的问题,请参考以下文章