聚合函数(MAX 等)返回 NULL 而不是没有行
Posted
技术标签:
【中文标题】聚合函数(MAX 等)返回 NULL 而不是没有行【英文标题】:Aggregate functions (MAX, etc.) return NULL instead of no rows 【发布时间】:2021-06-06 05:14:33 【问题描述】:当没有行与给定条件匹配时,如何使聚合函数(例如,MAX
)不返回行而不是 NULL
?
例如,以下查询返回一行:
SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'
使用GROUP BY ()
没有帮助:
SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'
GROUP BY ()
如何让它不返回任何行(选择 0 行,NO_DATA_FOUND
)?
我正在使用 Oracle Database 12c。
【问题讨论】:
【参考方案1】:使用having
子句:
SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'
HAVING COUNT(*) > 0;
请注意,department_id
看起来像一个数字。如果是这样,比较应该是一个数字 - 即去掉 11111
周围的单引号。
【讨论】:
【参考方案2】:使用MINUS
:
SELECT MAX(salary)
FROM hr.employees
WHERE department_id = '11111'
MINUS
SELECT NULL FROM DUAL;
db小提琴here
【讨论】:
【参考方案3】:SELECT NVL(MAX(salary),0) FROM hr.employees WHERE department_id = '11111'
这将返回为 0 值,然后您可以执行进一步的操作,希望有所帮助。
【讨论】:
问题是“如何让它返回 0 行?”这将返回包含 0 的行,而不是返回 0 行。以上是关于聚合函数(MAX 等)返回 NULL 而不是没有行的主要内容,如果未能解决你的问题,请参考以下文章