sql - Oracle 数据库中的虚拟列
问题描述
我在表中有 5 列。我必须存储difference of max value and min value
在另一个column
. 我正在使用以下查询。这a b c d e
是列名。
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (max(a,b,c,d,e)-Min(a,b,c,d,e)) VIRTUAL);
我得到以下错误。
Error starting at line : 28 in command -
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (max(a,b,c,d,e)-Min(a,b,c,d,e)) VIRTUAL)
Error report -
ORA-00934: group function is not allowed here
00934. 00000 - "group function is not allowed here"
*Cause:
*Action:
如果不允许使用组功能,是否有解决方法?
解决方案
我建议你使用 GREATEST 和 LEAST
ALTER TABLE samples ADD
(Range_value NUMBER(10,2) GENERATED ALWAYS
AS (GREATEST (a,b,c,d,e)-LEAST(a,b,c,d,e)) VIRTUAL);
见:db<>fiddle here
这些函数适用于当前行,可用于您的虚拟列,而 MIN/MAX 跨多行操作,不能用于您的虚拟列。
如果您确实需要跨多行操作,那么视图可能是最简单的选择。
推荐阅读
- vue.js - 如何直接在组件中访问“布局”或“页面”功能?
- c++ - C++ 分而治之的算法问题
- node.js - 使用 Postman 将数据发送到 Google Cloud Function
- rust - 盒子如何
解构自己? - ios - 如何修复 Swift 中的“线程 1:致命错误:在隐式展开可选值时意外发现 nil”错误?
- laravel - 登录 laravel 网站
- postgresql - 使用 boto3 将枚举类型插入 aurora postgres
- verilog - 有效断言在 req-ack 事务中出现一次
- node.js - 快速会话 req.session 不持久
- visual-studio-code - 在 VSCode 中移动火车