如何使用1 sql的总和在表中创建行

时间:2012-08-15 07:26:28

标签: sql oracle oracle-sqldeveloper

我正在尝试创建具有划分可能性的表,并且我希望一行中所有单元格的总和为1。 例如:

0.1, 0.2, 0.3, 0.3, 0.1  

2 个答案:

答案 0 :(得分:8)

您可以在表上创建一个约束,要求每一行满足某些条件,在这种情况下,列总数为1:

create table my_table (
  col1 number,
  col2 number,
  col3 number,
  col4 number,
  constraint assert_sum_is_one check (col1 + col2 + col3 + col4 = 1)
)

任何将行插入或更新到而不是总计1的尝试都会导致约束违规异常。

答案 1 :(得分:4)

如果您使用的是11g,则可以使用Oracle虚拟列:

http://www.oracle-base.com/articles/11g/virtual-columns-11gr1.php

与检查约束相结合。

CREATE TABLE myTable (
  id          NUMBER,
  col1        NUMBER(3),
  col1        NUMBER(3),
  col3        NUMBER(3),
  colsum      NUMBER GENERATED ALWAYS AS (col1 + col2 + col3) VIRTUAL,
  CONSTRAINT pk_mytable PRIMARY KEY (id)
);

然后添加一个约束来检查colsum总是正好为1。

编辑:波希米亚人的回答更简单,更好。在这种情况下,虚拟列的唯一优势是总和始终保持/可见,但如果约束阻止总和不是1,那么这不是必需的。我只是为了完成而留下这个答案。