还是会报消息 164,级别 15,状态 1,第 8 行 每个 GROUP BY 表达式必须至少包含一个不是外部引用的列。
时间: 2024-03-07 17:49:58 浏览: 129
如果你按照我刚才提供的方法仍然遇到了相同的错误,那么你可以尝试将 WHERE 子句中的子查询转换为一个 JOIN,然后在 GROUP BY 子句中包含表别名前缀,像这样:
```
SELECT e.EmployeeID, e.Name, e.Education, e.Birthday, e.Sex, e.Workyear, e.Address, e.PhoneNumber
FROM Employees202207210212 e
JOIN (
SELECT EmployeeID, SUM(income) - SUM(expense) AS TotalIncome
FROM Salary2022070210212
GROUP BY EmployeeID
) AS EmployeeIncome ON e.EmployeeID = EmployeeIncome.EmployeeID
WHERE EmployeeIncome.TotalIncome <= 2500
GROUP BY e.EmployeeID, e.Name, e.Education, e.Birthday, e.Sex, e.Workyear, e.Address, e.PhoneNumber;
```
这个查询应该可以运行,并且不再出现“每个 GROUP BY 表达式必须至少包含一个不是外部引用的列”的错误消息。
相关问题
每个 GROUP BY 表达式必须至少包含一个不是外部引用的列
是的,每个 GROUP BY 表达式必须至少包含一个在该表中定义的列,或者是一个聚合函数,而不是外部引用的列。如果 GROUP BY 表达式不符合这个要求,那么查询就会失败并返回错误。这是因为 GROUP BY 子句用于将结果集中的行分组,并对每个分组执行聚合操作,而如果分组表达式不是有效的表达式,那么就无法对其进行分组和聚合操作。
每个 group by 表达式必须至少包含一个不是外部引用的列。_神奇的 SQL 之层级:为什么 GROUP BY 之后不能直接引用原表中的列...
这是因为在 GROUP BY 之后,查询结果已经被分组,而这些分组是按照 GROUP BY 表达式的结果来划分的。如果在 SELECT 子句中直接引用原表中的列,那么这些列对应的值将不是唯一的,因为它们属于不同的分组。这导致无法正确地计算聚合函数的值,例如 SUM、AVG、MAX、MIN 等。因此,每个 GROUP BY 表达式必须至少包含一个不是外部引用的列,以确保查询结果正确分组。
阅读全文