我不明白为什么我的解决方案不起作用。
我正试图在数据库中按部门统计雇员人数。
有两张桌子:
CREATE TABLE DEPARTMENT
(
NAME VARCHAR(32) NOT NULL,
ID INT NOT NULL PRIMARY KEY
);
CREATE TABLE EMPLOYEE
(
NAME VARCHAR(32) PRIMARY KEY NOT NULL,
DEPARTMENT INT NOT NULL REFERENCES DEPARTMENT(ID)
);
我还创建了一个视图来显示部门中的员工数量。
CREATE
OR REPLACE VIEW VIEW_NB AS
SELECT
DEPARTMENT.NAME AS DEPARTEMENT,
count(*) AS nb
FROM
DEPARTMENT
LEFT JOIN
EMPLOYEE
ON DEPARTMENT.ID = EMPLOYEE.DEPARTMENT
GROUP BY
DEPARTMENT.ID,
DEPARTMENT.NAME;
SELECT
ADD_DEPARTMENT('FRANCE', 10);
SELECT
ADD_DEPARTMENT('SPAIN', 100);
SELECT
ADD_EMPLOYEE('JOSE', 10);
结果是
departement | nb
-------------+----
FRANCE | 1
SPAIN | 1
但应该是
departement | nb
-------------+----
FRANCE | 0
SPAIN | 1
我理解使用左连接的必要性。
然而,我的观点是,每个部门至少有一名员工,即使他们没有员工。
我错过什么了吗?如果是什么?
最佳答案
这应该有效:
SELECT DEPARTMENT.NAME AS DEPARTEMENT, count(EMPLOYEE.DEPARTMENT) AS nb
FROM DEPARTMENT
LEFT JOIN EMPLOYEE
ON DEPARTMENT.ID = EMPLOYEE.DEPARTMENT
GROUP BY DEPARTMENT.ID, DEPARTMENT.NAME;
将1作为计数的原因是您使用了
*
,这意味着-将任何记录都计为1,无论数据如何。COUNT()
默认情况下忽略NULL
,因此您只需在其中提供一个右(详细)表列。关于sql - 求和并加入SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40403295/