Access SQL查询报错求助:聚合函数未包含指定表达式问题
问题排查与修正方案
第一个查询错误分析与修正
错误原因
原查询中HAVING COUNT(n.ean3) > (p.b_ilosc / p.dzielnik)存在两个核心问题:
p.b_ilosc和p.dzielnik既未被聚合,也不在GROUP BY子句中。按n.INDEKS和n.EAN3分组后,Access无法确定使用pz40表中对应分组的哪一条记录的字段值。- 直接关联两张表后分组,会因一对多关联关系重复统计
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;
第二个查询错误分析与修正
错误原因
COUNT()语法不合法,Access要求COUNT函数必须指定参数,比如COUNT(*)统计分组内所有记录,COUNT(b_eanvbn)统计分组内非空值数量。- 直接在
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
相关产品推荐
相关产品推荐

