我只是好奇:我知道类似的事情
SUM(string = 'anyString') over (partition by ANY_COLUMN)
或
SUM(string like 'anyWildcard%') over (partition by ANY_COLUMN)
正在 MySQL/MariaDB 中工作。 Oracle 中的等价物是什么?
ANSI/ISO SQL 标准方式是使用
case
表达式 进行条件聚合:
SUM(case when string = 'anyString' then 1 else 0 end) over (partition by ANY_COLUMN)
MySQL/MariaDB 是唯一将布尔表达式视为 1 或 0 整数值的 SQL 数据库。这不是标准 SQL。但它允许使用诸如在布尔表达式上使用
SUM()
之类的技巧,这相当于计算表达式为 true 的行。
在 Oracle 或任何其他数据库中,您可以通过以下方式将布尔值映射到整数:
SUM(CASE string WHEN 'anyString' THEN 1 ELSE 0 END) ...