这是我的 Oracle SQL 查询:
SELECT
COUNT(CASE WHEN SAL IS NOT NULL THEN 1) AS SALARIED_DEPT30,
COUNT(CASE WHEN COMM IS NOT NULL THEN 1) AS COMM_DEPT30
FROM
EMP
WHERE
DEPTNO = 30;
我收到这条消息:
ORA-00905:缺少关键字
我错过了什么?
我的目标是查询列
DEPTNO
选择30并统计有多少员工有工资,并查询有多少人收到佣金。我正在尝试在一个查询中获取两个单独的计数(彼此独立)。
我试图避免的是:
SELECT COUNT(*)
FROM EMP
WHERE DEPTNO = 30
AND SAL IS NOT NULL
AND COMM IS NOT NULL;
在运行时,我不想收到仅包含 SAL 和 COMM 都不为 NULL 的员工的表。
CASE
表达式由 END
终止。
SELECT COUNT(CASE WHEN SAL IS NOT NULL THEN 1 END) AS SALARIED_DEPT30,
COUNT(CASE WHEN COMM IS NOT NULL THEN 1 END) AS COMM_DEPT30
FROM EMP
WHERE DEPTNO = 30;
但是,聚合函数通常会忽略
NULL
值,因此您可以将其简化为:
SELECT COUNT(SAL) AS SALARIED_DEPT30,
COUNT(COMM) AS COMM_DEPT30
FROM EMP
WHERE DEPTNO = 30;