[英]SQL: Joins with two basic tables
得到两张 SQL 表,结构和值如下所述。
表 1:员工
CREATE TABLE `employee` (
`EmpId` int(11) NOT NULL,
`EmpName` varchar(100) NOT NULL,
`DeptId` int(11) NOT NULL,
`Jod` date NOT NULL,
`Salary` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `employee` (`EmpId`, `EmpName`, `DeptId`, `Jod`, `Salary`) VALUES
(1, 'ABCD', 1, '2015-02-23', 50000),
(2, 'EFGH', 1, '2016-04-11', 40000),
(3, 'HIJK', 2, '2016-05-22', 35000),
(4, 'LMNO', 3, '2016-05-22', 30000),
(5, 'PQRS', 3, '2016-06-03', 30000);
表 2:部门
CREATE TABLE `dept` (
`DeptId` int(11) DEFAULT NULL,
`DeptName` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `dept` (`DeptId`, `DeptName`) VALUES
(1, 'Sales'),
(2, 'Account'),
(3, 'Support');
现在在这两个中,我需要查询以打印每个部门名称和该部门的员工人数。
我已经尝试过以下查询
SELECT DISTINCT(dept.DeptName),COUNT(employee.EmpId) FROM dept JOIN employee on dept.DeptId = employee.DeptId
产生结果
DeptName COUNT(employee.EmpId)
Sales 5
但我需要的实际结果是
DeptName COUNT(employee.EmpId)
Sales 2
Accounts 1
Support 2
如何实现它,任何帮助表示赞赏。
你想要GROUP BY
:
SELECT d.DeptName, COUNT(e.EmpId)
FROM dept d JOIN
employee e
ON e.DeptId = d.DeptId
GROUP BY d.DeptName;
我不确定您对使用DISTINCT
的思考过程是什么。 首先,它适用于所有被选中的列; 它不是 function。 括号是无关紧要的。
其次,您正在使用聚合 function ( COUNT()
)并且认为应该自动将您指向GROUP BY
的方向。
这是一个 db<>fiddle。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.