选择列表中的列 '.......' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

错误:消息 8120,级别 16,状态 1,第 51 行

选择列表中的列 'Employee.EmployeeID' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。


题目:查询最低收入大于3700的部门信息

截取错误的代码


运行  select EmployeeID from Employee

 group by DepartmentID 这这里会报上面的错误


我们来看一下sql中有关group by 的定义:

group by子句将查询结果按某一列或多列的值分组,值相等的为一组

对查询分组的目的就是为了细化聚集函数的作用对象,如果未对查询结果分组,聚集函数将作用于整个查询结果。

而分组后聚集函数将作用于每一个组,即每一个组都有一个函数值

定义说的很严谨但我觉的并没什么实际的作用,下面给出官方解释


选择列表中任何非聚合表达式内的每个属性名都应包含在GROUP BY列表中,或者GROUP BY表达式必须与选择列表表达式完全


是不是一脸懵逼(对于我是的)简单的说就是在用select查询的列名(除了在聚集函数的)都要出现在group by中

这个错误很坑

下面给出解决方案

select d.* from Department d where d.DepartmentID in
(select minSalary.DepartmentID as DepartmentID from
(select sal.DepartmentID,MIN(sal.Income) as minIncome from
(select s.*,e.DepartmentID from
Salary s,Employee e
where e.EmployeeID=s.EmployeeID --等值连接
)as sal --查询带有DepartmentID的工资信息表并命名为sal
  group by sal.DepartmentID
)as minSalary --查询每个部门的最低收入(根据DepartmentID分组)
where minSalary.minIncome>3700 --查询最低收入大于3700的部门DepartmentID
)--查询最低收入大于3700的部门详细信息
--5)查询在'财务部'的所有雇员的个人信息
-- 便于理解可以先查询带有DepartmentName的雇员信息



猜你喜欢

转载自blog.csdn.net/qq_41682681/article/details/80763975