聚合函数(MAX 等)return NULL 而不是没有行

Aggregate functions (MAX, etc.) return NULL instead of no rows

如何创建聚合函数(例如,MAX)return 没有行而不是 NULL 当没有行符合给定条件时?

例如下面的查询returns一行:

SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'

使用 GROUP BY () 没有帮助:

SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'
GROUP BY ()

如何使 return 没有行(已选择 0 行,NO_DATA_FOUND)?

我正在使用 Oracle Database 12c。

使用MINUS:

SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'
MINUS
SELECT NULL FROM DUAL;

db<>fiddle here

SELECT NVL(MAX(工资),0) 来自 hr.employees 其中 department_id = '11111'

这会return为0值,然后你可以进行进一步的操作,希望对你有所帮助。

使用 having 子句:

SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'
HAVING COUNT(*) > 0;

请注意 department_id 看起来像一个数字。如果是这样,比较应该是一个数字——即去掉 11111.

周围的单引号