我有一个由:
定义的表格create table apple(
A number,
B number);
现在,我需要获取表中的值,如下所示:
A B
------------------
1 4(max of A)
2 4(max of A)
3 4(max of A)
4 4(max of A)
如何插入这些行,B
的最大值为A
?
答案 0 :(得分:5)
Welp,首先要在表格中插入1-4:
insert into apple (a) values (1)
insert into apple (a) values (2)
insert into apple (a) values (3)
insert into apple (a) values (4)
接下来,您将要更新表格以设置b
:
update apple set b = (select max(a) from apple)
如您所见,这是一个由两部分组成的过程。在创建该列之前,您无法获得a
的最大值!
答案 1 :(得分:0)
当然,如果您想要使用select语句来获取其他字段,请使用OVER子句:
SELECT a, MAX(a) OVER() as b
FROM table;
编辑:
对于现有的表格,你可以这样做:
UPDATE t SET b = maxcnt
FROM (
SELECT *, MAX(a) OVER() as maxcnt
FROM table
) t;
(我认为这适用于Oracle ......在MS-SQL中确实很好)
罗布
答案 2 :(得分:0)
从11g版本开始,您可以使用虚拟列(它们的值实时计算) 因此,您应该按如下方式更改列定义:
create table apple (
A number,
B number GENERATED ALWAYS AS ( max(A) ) VIRTUAL
);
我没有Oracle 11g进行测试,所以无法检查,但它应该正常工作。 您还可以将用户定义的函数用于虚拟列。
有关更多示例和信息,请参阅http://www.oracle-base.com/articles/11g/VirtualColumns_11gR1.php!
11g中创建表的官方文档: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_7002.htm