如何在更新语句中正确使用 Avg 函数?
Posted
技术标签:
【中文标题】如何在更新语句中正确使用 Avg 函数?【英文标题】:How do I correctly use an Avg function in an update statement? 【发布时间】:2011-09-06 19:55:59 【问题描述】:我正在尝试获取插入表中的每个 MIUID 的平均值。相关表格及栏目信息如下:
表 1.[MIU ID],表 1.[平均 RSSI]
和
Table2.MIUID,Table2.MeanNum
如果我只是使用 select 语句,我会执行以下操作:
Select DISTINCT Table1.[MIU ID], Avg(Table1.[Avg RSSI]) as MeanNum
From Table1
GROUP BY Table1.[MIU ID]
但是,我需要将此信息插入到 Table2 的列中。我已经尝试了以下和以下的变体,我得到的错误是它不允许我使用 Group By,另一个错误是 MeanNum 不是聚合函数的一部分。
UPDATE Table2
INNER JOIN Table1
ON Table2.MIUID = Table1.[MIU ID]
SET Table2.MeanNum = Avg([Table1].[Avg RSSI]);
我尝试过的另一个查询是:
UPDATE Table2
SET Table2.MeanNum = Avg([Table1].[Avg RSSI])
WHERE Table2.MIUID = Table1.[MIU ID]
Group By [Table1].[Avg RSSI]
总结 重申一下,我要做的就是获取 Table1 中每个不同 MIU ID 的 Avg RSSI 列的平均值,并将每个值插入到 Table2 中的相应行中。
注意 表 2 中有一个名为 AvgNum 的列,如果使用它会更容易,可以取平均值以获得需要进入 MeanNum 列的相同数字。
我知道如何分两步做我想做的事,但我希望能够在一个 sql 语句中完成。
【问题讨论】:
根据定义,关系表没有重复行。 SQL 查询的结果可以包含重复的行(默认为SELECT ALL
,而可以说它应该是SELECT DISTINCT
)。因此,为了在 SQL 中实施关系理论,我们鼓励人们始终使用SELECT DISTINCT
而不是SELECT [ALL]
、UNION
而不是UNION ALL
,并避免任何可能产生空值的东西。 p.s.如果 GROUP BY
返回空集,是否可以说具有“唯一行”? ;)
【参考方案1】:
编辑:下面的代码在 MS-Access/Jet 中不起作用。请参阅此链接:
Operation must use an updatable query. (Error 3073) Microsoft Access
原答案:
您可以在子查询中使用原始的 SELECT 查询并加入它。没有检查语法,我比 MS-Access 更熟悉 T-SQL,但类似:
UPDATE
t2
SET
t2.MeanNum = sub.MeanNum
From
Table2 t2
INNER JOIN
(
Select DISTINCT
Table1.[MIU ID],
Avg(Table1.[Avg RSSI] as MeanNum
From
Table1
GROUP BY
Table1.[MIU ID]
) sub
ON sub.[MIU ID] = t2.MIUID
【讨论】:
似乎无法让它发挥作用,即使尝试了多种变体。我收到错误“操作必须使用可更新查询”,就像我对 PaulStock 的查询所做的一样。 呃。好像和Access/Jet有关:***.com/questions/170578/… 非常有用的链接谢谢。尽管在 Access 中缺少对更新语句的支持是非常可悲的,但这回答了我的问题,我将求助于使用临时表的标准后备计划。您能否用您的评论更新您的答案,以便我可以接受它作为答案,并且人们不会认为该查询在 Access 中可以解决所述问题? 是的,这令人沮丧。更新。 :)以上是关于如何在更新语句中正确使用 Avg 函数?的主要内容,如果未能解决你的问题,请参考以下文章