关于count语句的疑问

leoshitiancai 2017-05-31 10:13:41
两个表分别是
emp:
dept:

我想查询出部门人数在2人以上(不包括两人)的员工信息,员工编号,员工姓名,部门名称,部门人数。
我编写了下面的语句
select id, name, deptname,count(deptname)
from
(select e.id, e.name, d.name as deptname, d.deptid
from emp as e, dept as d
where e.deptid = d.deptid
)
as new
where deptid =
(select deptid from emp
group by deptid
having count(*) > 2)
结果是:

但当我删除上面红字代码后,行数变成了3行。如下图显示


请问到底是哪里出错了,如何才能打到最上方的要求。
...全文
319 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-06-01
  • 打赏
  • 举报
回复
mysql的语法不是很标准,像这种情况,不写group by 也能得到count值。楼主的语句改成这样就应该是想要的结果了:
select deptname,count(deptname)
from
(select e.id, e.name, d.name as deptname, d.deptid
from emp as e, dept as d
where e.deptid = d.deptid
) 
as new
where deptid = 
(select deptid from emp
group by deptid
having count(*) > 2)
group by deptname
道素 2017-06-01
  • 打赏
  • 举报
回复
你想要的结果是什么呢?不应该是最后三行的吗? 因为这个部门有3人,而你又要求列出员工信息

;WITH emp(id,name,deptid)AS(
    SELECT 1,'Leo','1' UNION ALL
    SELECT 2,'Rick','4' UNION ALL
    SELECT 3,'Amanda','3' UNION ALL
    SELECT 4,'Lvy','3' UNION ALL
    SELECT 5,'Tracy','4' UNION ALL
    SELECT 6,'Jim','4' UNION ALL
    SELECT 7,'Tony',NULL 
),dept(deptid,name)AS(
   SELECT 1,N'IT部' UNION ALL
   SELECT 2,N'产品部' UNION ALL
   SELECT 3,N'开发部' UNION ALL
   SELECT 4,N'采购部' 
)
SELECT * FROM (
    SELECT emp.*,dept.name AS DeptName,COUNT(0)OVER(PARTITION BY dept.deptid) AS cnt FROM emp INNER JOIN dept ON emp.deptid=dept.deptid
) AS t WHERE t.cnt>2

id          name   deptid DeptName cnt
----------- ------ ------ -------- -----------
5           Tracy  4      采购部      3
6           Jim    4      采购部      3
2           Rick   4      采购部      3

leoshitiancai 2017-05-31
  • 打赏
  • 举报
回复
我把null补齐了以后还是一样的结果。 BTW,谢谢回答。
  • 打赏
  • 举报
回复
3行那个是对的。 估计是连接的字段 带有null 的原因

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧