繁体   English   中英

MySQL:group子句有多个列

[英]MySQL: Multiple columns for group clause

我想显示每个部门中每个职位的员工人数。为此,我创建了下面提到的查询。 但这并不能赋予(a)所有角色(b)所属部门中所有角色的所有员工,其中员工人数为零。

SELECT qodi.department_name,IFNULL(qobi.band_name, 'No Band') 'Band',count(qu1.user_id) emp_count
FROM 
qee_org_dept_info qodi
LEFT OUTER JOIN qee_user qu1 ON qodi.department_name =qu1.department AND qu1.org_id=1
LEFT OUTER JOIN qee_org_band_info qobi ON qobi.band_name = qu1.band_name
GROUP BY qodi.department_name,qobi.band_name
ORDER BY qodi.department_name

角色在qee_org_band_info中定义。 用户在qee_user中定义,部门在qee_org_dept_info中定义

以上查询结果为: 在此处输入图片说明

预期结果是:-所有部门和所有角色都应到位,即使该部门中该角色的员工人数为零。

所有部门和所有角色都应该出现,即使该部门中该角色的员工人数为零。

这意味着,您需要在部门和角色之间产生笛卡尔联接,并根据笛卡尔联接的结果来联接员工。

SELECT qodi.department_name,IFNULL(qobi.band_name, 'No Band') 'Band',count(qu1.user_id) emp_count
FROM 
(qee_org_dept_info qodi INNER JOIN qee_org_band_info qobi)
LEFT OUTER JOIN qee_user qu1 ON qodi.department_name =qu1.department AND qobi.band_name = qu1.band_name AND qu1.org_id=1 
GROUP BY qodi.department_name,qobi.band_name
ORDER BY qodi.department_name

请注意,我更改了连接顺序,并且使用内部连接而不是左键来连接具有乐队的部门。 根据mysql文档:

在没有联接条件的情况下,INNER JOIN和,(逗号)在语义上等效:在指定的表之间都产生笛卡尔积(即,第一个表中的每一行都与第二个表中的每一行都联接在一起) )。

从技术上讲,不需要在内部连接表达式两边加上括号,但是,我觉得这种方式的代码更具可读性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM