【问题标题】:GREATEST and LEAST in SQL standardSQL 标准中的 GREATEST 和 LEAST
【发布时间】:2011-04-17 04:55:08
【问题描述】:

我的理解是 GREATEST() 和 LEAST() 不是 SQL 标准的一部分,但是很常见。

我想知道,有没有办法克隆 GREATEST 的功能并保持在 SQL 标准内?

SELECT id, GREATEST(1,2,3,4,5,6,7) AS number FROM table

完整的查询:

  SELECT SUBSTR(section,1,2) AS campus, 
           AVG(GREATEST(maximum - enrolled, 0)) AS empty 
    FROM sectionrun 
   WHERE coursenumber = '105' AND subject = 'ENGL' 
GROUP BY campus

【问题讨论】:

标签: sql standards


【解决方案1】:

您可以使用CASE 表达式:

  SELECT SUBSTR(section,1,2) AS campus, 
           AVG(CASE WHEN maximum - enrolled > 0 
                    THEN maximum - enrolled
                    ELSE 0
               END) AS empty 
    FROM sectionrun 
   WHERE coursenumber = '105' AND subject = 'ENGL' 
GROUP BY campus

【讨论】:

  • 这不会很好地扩展到两个以上的值。对于 OP 的具体示例来说很好,但不能回答更一般的问题。
【解决方案2】:
GREATEST(1,2,3,4,5,6,7) AS number

可以变成

(select max(tmp) from (
        select 1 tmp from dual
        union all
        select 2 tmp from dual
        union all
        select 3 tmp from dual
        union all
        select 4 tmp from dual
        union all
        select 5 tmp from dual
        union all
        select 6 tmp from dual
        union all
        select 7 tmp from dual
) ) AS number          

【讨论】:

    【解决方案3】:

    到目前为止,Azure SQL 支持 GREATEST() 和 LEAST()。 SQL Server 2022 将为本地安装提供它。

    最棒的文档:

    https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-greatest-transact-sql?view=sql-server-ver15

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多