为什么使用GROUPBY子句时从MySQL返回的记录更少?
我最近开始使用MySQL工作台使用MySQL。我的表中总共有1000行。运行此查询时,我得到1000行:为什么使用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个唯一
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)