ABAP CDS view 的 having Condition 用法

举报
汪子熙 发表于 2023/08/07 11:55:15 2023/08/07
【摘要】 Having condition 在 group by 执行完毕后才 evaludateABAP CDS (Core Data Services) 是一个用于定义和消费数据模型的基础设施。CDS 提供了一种新的数据建模方式,它能够在数据库层定义复杂的视图,以提供更高效的数据访问。HAVING 关键字在 SQL 中常常与 GROUP BY 关键字一起使用,用于在对查询结果进行分组后进行过滤。相...

Having condition 在 group by 执行完毕后才 evaludate

ABAP CDS (Core Data Services) 是一个用于定义和消费数据模型的基础设施。CDS 提供了一种新的数据建模方式,它能够在数据库层定义复杂的视图,以提供更高效的数据访问。

HAVING 关键字在 SQL 中常常与 GROUP BY 关键字一起使用,用于在对查询结果进行分组后进行过滤。相对于 WHERE 关键字在分组之前对原始数据进行过滤,HAVING 关键字能够在分组后,对聚合函数(如 COUNT、SUM、AVG 等)的结果进行过滤。

在 ABAP CDS view 中,HAVING 关键字的用法与 SQL 中类似。以下是一个简单的例子:

define view Sales_Summary as select from snwd_so as Order
group by Order.currency_code
{
    Order.currency_code as Currency,
    sum(Order.gross_amount) as TotalAmount
}
having sum(Order.gross_amount) > 10000

在这个例子中,我们首先从 snwd_so 表中选择数据,然后按照货币类型(currency_code)进行分组。每个货币类型对应的总销售额(TotalAmount)通过 sum 聚合函数计算得出。最后,我们使用 HAVING 关键字过滤出总销售额大于 10000 的货币类型。

需要注意的是,HAVING 关键字可以使用任何聚合函数的结果进行过滤,但不能直接使用原始数据列。例如,以下的语句是错误的:

define view Sales_Summary as select from snwd_so as Order
group by Order.currency_code
{
    Order.currency_code as Currency,
    sum(Order.gross_amount) as TotalAmount
}
having Order.gross_amount > 10000 // 错误的用法,不能直接使用原始数据列

在这个错误的例子中,我们试图在 HAVING 关键字中直接使用原始数据列 gross_amount,这是不允许的。在 HAVING 关键字中,只能使用被 GROUP BY 关键字分组的列和聚合函数的结果。

总结一下,ABAP CDS view 中的 HAVING 关键字是一个强大的工具,它能够在数据分组后对聚合函数的结果进行过滤。这在处理大量数据,需要进行分组和聚合的场景中非常有用。但需要注意,HAVING 关键字不能直接使用原始数据列,只能使用被 GROUP BY 关键字分组的列和聚合函数的结果。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。