MS Access - 将两个 SELECT 语句与一个包含聚合函数的语句联合

Posted

技术标签:

【中文标题】MS Access - 将两个 SELECT 语句与一个包含聚合函数的语句联合【英文标题】:MS Access - Union a two SELECT statements with one statement containing Aggregate function 【发布时间】:2017-04-01 19:38:02 【问题描述】:

假设我有这张数据表,[Table]:

[ColumnA] [ColumnB]
 Field1      10
 Field2      20
 Field3      30
 Field4      40
 Field5      50

我有两个 SELECT 语句。一种是选择要显示的字段范围:

SELECT * FROM [Table];

另一种是计算这些字段的标准差和平均值:

SELECT StDev([ColumnB]) AS [Standard Deviation], Avg([ColumnB]) AS [Average] FROM [Table];

有没有办法将这两个查询合并在一起,或者如果可能的话,合并到一个查询中?

所以最终结果将如下所示:

[ColumnA] [ColumnB] [Standard Deviation] [Average]
 Field1      10             XX              YY
 Field2      20             XX              YY            
 Field3      30             XX              YY
 Field4      40             XX              YY
 Field5      50             XX              YY

但是,我知道从第一个查询开始,它将显示总共 5 行记录。但是从第二个查询开始,它只会显示一条记录。在这种情况下,是否可以在 [Standard Deviation] 和 [Average] 列中指示相同的结果?所以当我根据这些数据绘制图表时,它会显示为一系列可以连接成水平直线的点。

不确定解释是否足够。 请帮忙。

【问题讨论】:

是整个表的标准差和平均值还是基于另一列? @ClintB StDev 和 Avg 基于 [ColumnB]。 【参考方案1】:

如果第二个查询只返回一行,您可以使用如下查询:

SELECT TABLE.ColumnA
    ,TABLE.ColumnB
    ,[Standard Deviation]
    ,[Average]
FROM [Table]
    ,(
        SELECT StDev([ColumnB]) AS [Standard Deviation]
            ,Avg([ColumnB]) AS [Average]
        FROM [Table]
        );

【讨论】:

如果第一个查询返回五行,第二个查询只返回一行,会不会出错?这是否意味着剩下的 4 行是空的? 不,这不是错误。在这里,我们对两个源进行完全连接,它将产生 #_Rows_In_Source1 * #_Rows_In_Source2 行,在您的情况下 5 * 1=5 行,所有行都将按照要求包含数据。 如果我想在第一个和第二个查询中都应用 WHERE 子句,我该怎么做?我应该做这样的事情吗? SELECT TABLE.ColumnA, TABLE.ColumnB, [Standard Deviation], [Average] FROM [Table] WHERE [ColumnB] > 10, (SELECT StDev([ColumnB]) AS [Standard Deviation], Avg([ColumnB]) AS [Average] FROM [Table] WHERE [ColumnB] > 10); 是的,没错,两个查询都要加条件

以上是关于MS Access - 将两个 SELECT 语句与一个包含聚合函数的语句联合的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询

MS Access 中的条件选择语句

MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录

MS Access 中的多行插入语句

检查 MS Access SQL 语句中的空值

将 INSERT 上的 ID 返回给 Ms Access Db?