You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access SQL查询报错求助:聚合函数未包含指定表达式问题

问题排查与修正方案

第一个查询错误分析与修正

错误原因

原查询中HAVING COUNT(n.ean3) > (p.b_ilosc / p.dzielnik)存在两个核心问题:

  1. p.b_ilosc和p.dzielnik既未被聚合,也不在GROUP BY子句中。按n.INDEKS和n.EAN3分组后,Access无法确定使用pz40表中对应分组的哪一条记录的字段值。
  2. 直接关联两张表后分组,会因一对多关联关系重复统计ean3的出现次数,导致统计结果失真。

修正后的查询语句

先通过子查询分别计算两张表的目标数据,再关联筛选。假设pz40中每个b_indeks对应唯一的b_ilosc和dzielnik,若存在多条记录,可根据需求将子查询中的字段替换为SUM/MAX等聚合函数:

SELECT n_stats.INDEKS, n_stats.EAN3, n_stats.liczba_wystapien_noteszmian
FROM (
    SELECT INDEKS, EAN3, COUNT(EAN3) AS liczba_wystapien_noteszmian
    FROM noteszmian
    WHERE EAN3 IS NOT NULL
    GROUP BY INDEKS, EAN3
) AS n_stats
INNER JOIN (
    SELECT b_indeks, (b_ilosc / dzielnik) AS ilosc_przeliczona
    FROM pz40
) AS p_stats ON n_stats.INDEKS = p_stats.b_indeks
WHERE n_stats.liczba_wystapien_noteszmian > p_stats.ilosc_przeliczona;

第二个查询错误分析与修正

错误原因

  1. COUNT()语法不合法,Access要求COUNT函数必须指定参数,比如COUNT(*)统计分组内所有记录,COUNT(b_eanvbn)统计分组内非空值数量。
  2. 直接在HAVING中写SUM(b_ilosc)/SUM(dzielnik),会被识别为当前分组的聚合值,而非整个pz40表的汇总值,不符合需求。

修正后的查询语句

先通过子查询计算整个pz40表的SUM(b_ilosc)/SUM(dzielnik)值,再与分组统计结果比较:

SELECT b_eanvbn, COUNT(*) AS liczba_wystapien
FROM pz40
WHERE b_eanvbn IS NOT NULL
GROUP BY b_eanvbn
HAVING COUNT(*) > (
    SELECT SUM(b_ilosc)/SUM(dzielnik)
    FROM pz40
    WHERE b_eanvbn IS NOT NULL
);

内容的提问来源于stack exchange,提问作者Jakub Cnota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:33:25