【问题标题】:MS Access - Union a two SELECT statements with one statement containing Aggregate functionMS Access - 将两个 SELECT 语句与一个包含聚合函数的语句联合
【发布时间】: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]。

标签: ms-access select union aggregate-functions ms-access-2016


【解决方案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);
  • 是的,没错,两个查询都要加条件
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 2015-08-30
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2010-11-24
相关资源
最近更新 更多