为什么使用GROUPBY子句时从MySQL返回的记录更少?

为什么使用GROUPBY子句时从MySQL返回的记录更少?,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我最近开始使用MySQL工作台使用MySQL。我的表中总共有1000行。运行此查询时,我得到1000行: SELECT Id, Dname, DeptId FROM DEPARTMENT; 但是,当我添加GROUPBY子句时,我只得到44行: SELECT Id, Dname, DeptId FROM DEPARTMENT GROUP BY DeptId; 为什么会这样?是MySQL Workbench在显示行时截断了行吗 编辑: 当我给出这个查询时,它也会返回44行 您的表可能有44个唯一

我最近开始使用MySQL工作台使用MySQL。我的表中总共有1000行。运行此查询时,我得到1000行:

SELECT Id, Dname, DeptId
FROM DEPARTMENT;
但是,当我添加GROUPBY子句时,我只得到44行:

SELECT Id, Dname, DeptId
FROM DEPARTMENT
GROUP BY DeptId;
为什么会这样?是MySQL Workbench在显示行时截断了行吗

编辑:

当我给出这个查询时,它也会返回44行


您的表可能有44个唯一的DeptId

它不是MySQL工作台中的bug或其他什么。这就是GROUP BY的工作方式。如果你按Id分组,这是你的PK,你将得到1000行

GROUP BY子句聚合数据,如下所示:

编辑 在@pv中:=1是表中的第一个id


告诉我它是否有效。参考:

当您使用groupby时,不会选择重复的部门。您的表可能只包含44个唯一的部门,因此它将显示44行

以获取您应该使用的第一级子部门:


DeptIdOh中可能只有44个唯一条目!那么,如何实现这个DeptId是一个可选字段。填充时,表示它是某个部门的子部门。现在我要列出部门的所有子部门。。。您需要的是一个递归查询。我将编辑答案。上面只返回两行。此查询已成功->从DeptId所在的部门中选择*从DeptId不为空的部门中选择ID是否有子部门?是的,我有,递归到任何级别。但我只想等到第一关哦!那么,如何实现这个DeptId是一个可选字段。填充时,表示它是某个部门的子部门。现在,我想列出部门的所有子部门。不要使用groupby或distinctHow关于每个部门下的子部门数。您是否对部门和子部门使用单独的表?试试这个。。从部门ID不为空的部门中选择ID;如果DeptId不为NULL,我认为要获得第一级,应该不为NULL来选择父级。
SELECT DISTINCT(DEPTID) 
FROM DEPARTMENT;
SELECT @pv:=Id AS d_id, Dname, DeptId
FROM DEPARTMENT
JOIN
(SELECT @pv:=1) tmp
WHERE DeptId=@pv
select *
from DEPARTMENT
where
    DeptId in (select ID from DEPARTMENT where DeptId is null)