1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 选择列表中的列 '.......' 无效 因为该列没有包含在聚合函数或 GROUP BY 子句中。

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

时间:2022-04-07 22:48:03

相关推荐

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。