将列的最大值插入另一列

时间:2009-08-13 03:55:28

标签: sql oracle plsql

我有一个由:

定义的表格
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

3 个答案:

答案 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