为什么使用group by子句时从MySQL返回的记录较少?

时间:2016-08-24 11:20:27

标签: mysql sql mysql-workbench

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

SELECT Id, Dname, DeptId
FROM DEPARTMENT;

enter image description here

但是,当我添加GROUP BY子句时,我只得到44行:

SELECT Id, Dname, DeptId
FROM DEPARTMENT
GROUP BY DeptId;

enter image description here

为什么会这样? MySQL Workbench是否在显示行时截断行?

修改

当我提出此查询时,它也会返回44 rows

SELECT DISTINCT(DEPTID) 
FROM DEPARTMENT;

enter image description here

3 个答案:

答案 0 :(得分:0)

你的桌子可能有44个独特的DeptId。

这不是MySQL Workbench中的错误或其他任何内容。这是 GROUP BY 的工作原理。如果您通过Id GROUP BY (并且它是您的PK),您将获得1000行。

GROUP BY子句聚合数据,如您所见:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

修改

SELECT @pv:=Id AS d_id, Dname, DeptId
FROM DEPARTMENT
JOIN
(SELECT @pv:=1) tmp
WHERE DeptId=@pv

@pv:=1 中,1是表格中的第一个ID。

告诉我它是否有效。参考:How to do the Recursive SELECT query in MySQL?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

要获得第一级子部门,您应该使用:

select *
from DEPARTMENT
where
    DeptId in (select ID from DEPARTMENT where DeptId is null)