聚合函数(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
.
周围的单引号
如何创建聚合函数(例如,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
.