选择列表中的列 '.......' 无效,因为该列没有包含在聚合函数或 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的雇员信息



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值