【问题标题】:Aggregate functions (MAX, etc.) return NULL instead of no rows聚合函数(MAX 等)返回 NULL 而不是没有行
【发布时间】: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。

【问题讨论】:

    标签: sql oracle group-by aggregate-functions


    【解决方案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 行。
        猜你喜欢
        • 2018-10-26
        • 1970-01-01
        • 1970-01-01
        • 2017-02-10
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 2017-03-20
        • 1970-01-01
        相关资源
        最近更新 更多