我收到错误消息“您正在尝试执行一个查询,其中所选的表达式不属于统计函数的一部分。” 在 MS Access 2010 中?

Tan*_*nno 3 ms-access

请注意:我的 Access 副本是荷兰语,因此任何英文部分都是从荷兰语翻译而来的。

我目前正在使用 SQL 在 Access 中处理数据库,练习是:

创建一个查询,列出所有罚款超过 25 欧元的学生。

我创建了这个查询:

SELECT L.LLNR, U.LLNR, L.VOORNAAM, L.TUSSENVOEGSEL, L.ACHTERNAAM, SUM(U.BOETE)

FROM 
    LEERLINGEN L
    INNER JOIN UITLENINGEN U ON L.LLNR = U.LLNR

WHERE (((U.BOETE)>25));
Run Code Online (Sandbox Code Playgroud)

当我单击时Execute,出现以下错误(从荷兰语翻译)

您正在尝试执行一个查询,其中所选表达式 LLNR 不是统计函数的一部分。

我该怎么办?

翻译: | Leerlingen = 学生 | Boete = 点球 |

Kev*_*sel 5

当你有一个聚合函数时,你需要一个GROUP BY语句。在你的情况下,这将是

SELECT 
    LEERLINGEN.LLNR, 
    UITLENINGEN.LLNR, 
    LEERLINGEN.VOORNAAM, 
    LEERLINGEN.TUSSENVOEGSEL, 
    LEERLINGEN.ACHTERNAAM, 
    SUM(UITLENINGEN.BOETE)
FROM 
    LEERLINGEN 
    INNER JOIN UITLENINGEN ON LEERLINGEN.LLNR = UITLENINGEN.LLNR
WHERE 
    (((UITLENINGEN.BOETE)>25))
GROUP BY
    LEERLINGEN.LLNR, 
    UITLENINGEN.LLNR, 
    LEERLINGEN.VOORNAAM, 
    LEERLINGEN.TUSSENVOEGSEL, 
    LEERLINGEN.ACHTERNAAM;
Run Code Online (Sandbox Code Playgroud)

GROUP BY 子句在 WHERE 子句之后但在 SELECT 语句的 ORDER BY(或 HAVING)子句之前。在这种情况下,您希望获得其他列的每个组合的“Boete”总和,因此需要按所有其他行进行分组。

简而言之,如果您有一个聚合函数(如 SUM、AVG、MIN 或 MAX),您需要告诉数据库引擎如何处理这些非聚合列。这是解释 GROUP BY 在那里为您做什么的一种简单方式。

顺便说一下,如果你想找出所有 Uitleningen.Boete 的总和大于 25 的情况(而不是只包括 Uitleningen.Boete 大于 25 的记录),你实际上必须使用 HAVING 子句。然后它看起来像这样:

SELECT 
    LEERLINGEN.LLNR, 
    UITLENINGEN.LLNR, 
    LEERLINGEN.VOORNAAM, 
    LEERLINGEN.TUSSENVOEGSEL, 
    LEERLINGEN.ACHTERNAAM, 
    SUM(UITLENINGEN.BOETE)
FROM 
    LEERLINGEN 
    INNER JOIN UITLENINGEN ON LEERLINGEN.LLNR = UITLENINGEN.LLNR
GROUP BY
    LEERLINGEN.LLNR, 
    UITLENINGEN.LLNR, 
    LEERLINGEN.VOORNAAM, 
    LEERLINGEN.TUSSENVOEGSEL, 
    LEERLINGEN.ACHTERNAAM
HAVING
    SUM(UITLENINGEN.BOETE)>25;
Run Code Online (Sandbox Code Playgroud)

将 HAVING 视为您团体的场所。使用 WHERE过滤,使用 HAVING过滤