mysql查询部门人数大于所有部门平均人数的部门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql查询部门人数大于所有部门平均人数的部门相关的知识,希望对你有一定的参考价值。

查询部门人数大于所有部门平均人数的部门编号,部门名称,部门人数
SELECT e.deptno,d.dename,count(empno) from emp e,dept d
where e.deptno = d.deptno and count(empno) >
(SELECT avg(COUNT(EMPNO)) FROM emp GROUP BY DEPTNO)
执行报错,请问怎么修改
oracle 里面语句是正确的,但是mysql这么写报错,问题应该出现在 avg(count(empno))这边

错误在于avg(count(empno))这里其实是按部门计数、按部门求平均两步查询,不能在一次子查询里实现。
其实可以跳出avg(count(,直接用count总人数除count部门数来求平均:select count(distinct empno)/count(distinct deptno)
参考技术A select t1.*, t2.s
from emp_hiloo t1 join (select deptno, avg(salary) s from emp_hiloo group by deptno) t2
on t1.deptno=t2.deptno
where t1.salary>t2.s追问

我要查询的是部门人数大于所有部门平均人数的部门编号,部门名称(如 a部门6人,b部门4人,c部门5人,那么部门平均人数是5人,大于平均人数的部门就是a部门,所以最后查询结果应该是显示a部门的部门编号、部门名称、部门人数

刚刚忘记说谢谢!

本回答被提问者和网友采纳
参考技术B 其一第一排count(empno)改为count(e.empno)
其二外层查询需要分组,不然你用count(*)就是错的
SELECT D.DEPTNO,D.DNAME,COUNT(E.ENAME)
FROM EMP E JOIN DEPT D ON E.DEPTNO=D.DEPTNO
GROUP BY D.DEPTNO,D.DNAME
HAVING COUNT(E.ENAME)>(
SELECT AVG(COUNT(ENAME)) FROM EMP GROUP BY DEPTNO
)

MySQL之多表查询练习

author_id author_name 
1 Kimmy
2 Abel
3 Bill
4 Berton
  bo ok_id author_id start_date end_date
  9 1 2017-09-25 21:16:04 2017-09-25 21:16:06
  10 3    
  11 2 2017-09-25 21:21:46 2017-09-25 21:21:47
  12 1    
  13 8    

 

  order_id book_id price order_date
  1 9 0.2 2017-09-24 21:21:46
  2 9 0.6 2017-09-25 21:16:04
  3 11 0.1 2017-09-25 21:21:46

 

 

 

在以上表中执行ABC表关联

SELECT `authors`.*, `books`.book_id, `orders`.order_id, `orders`.price FROM `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id        

#通过group by 分类,使用sum ,avg,count等函数求值

SELECT `authors`.*, sum(`orders`.price) FROM `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
GROUP BY `books`.book_id
 
 
#使用where条件,where不能用于选取列的AS别名判断,MYSQL的处理机制是先进行选取,再进行筛选
SELECT `authors`.*, `books`.book_id, `orders`.order_id, sum(`orders`.price) AS prices FROM `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id AND `orders`.order_date >= `books`.start_date AND `orders`.order_date <= `books`.end_date
WHERE `orders`.price is not NULL
GROUP BY `books`.book_id

 

使用having关键字,对于无法使用where字段的price进行统计

SELECT `authors`.*, `books`.book_id, sum(`orders`.price)AS prices FROM `authors`
LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
GROUP BY `books`.book_id
HAVING prices > 0.1

以上是关于mysql查询部门人数大于所有部门平均人数的部门的主要内容,如果未能解决你的问题,请参考以下文章

查询各个部门中各职位的人数与平均工资? 查询工资,奖金与10号部门某员工工资,奖金都相同的员工? SQL

oracle scott用户几张表的关联查询,谁能帮我把这些解决一下,悬赏100,谢谢各位了

17/12/6 子查询

查询各部门中高于部门平均工资的人员,人数及该部门的平均工资

MySQL之多表查询练习

MySQL之多表查询练习