繁体   English   中英

SQL:与两个基本表连接

[英]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.

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